Swing JComponent vergrößern

Hallo Welt und liebe Java-Freunde,

Ich habe folgendes Problem und hoffe auf Eure Hilfe:

Ich habe eine Klasse, die von JComponent erbt. Ich setzte die Größe mittels setPreferredSize() fest und nutze keinen LayoutManager.
Einem JFrame wurde diese Komponente hinzugefügt und das zeichnen auf ihr funktioniert auch.

Ich bekomme es aber nicht hin, die Größe der JComponent im nachhinein zu ändern. Naja, eigentlich schon, da das JFrame nach Aufruf von pack() die gewollte Größe annimmt.
Allerdings ist der 'bemalte' Bereich in diesem größeren JFrame nur so groß wie es die JComponent vor dem vergrößern war.

Scheinbar ist die JComponent wie gewollt größer, der Bereich, auf dem ich zeichnen kann allerdings nicht - wenn das denn richtig und verständlich erklärt ist. Verzeiht mir, falls nicht. :b

Ich bitte um Eure Hilfe! 🙂
 
Ein bisschen Code wäre nützlich.

Der bemalte Bereich ist gleich groß, heißt das, dass dein Gemälde nicht skaliert, oder heißt das, dass deine Zeichenfläche nicht skaliert? Das ist ein wesentlicher Unterschied.

Mit freundlichen Grüßen
Xelsarion
 
Uff, kann man mich über diesen Unterschied aufklären? 😀

Also hier wird die PreferredSize der JComponent verändert, nachdem sie schon mal (zu Beginn des Programms) gesetzt wurde. Das Fenster passt seine Größe auch dementsprechend an.
Java:
setPreferredSize(new Dimension(getWidth()*2, getHeight()*2));
      
        frame.pack();
        frame.setLocationRelativeTo(null);

Und so wird das Graphics-Objekt zu Beginnt (also vor Größenänderung) initialisiert. (getGraphics()-Methode der JComponent)
Java:
g = getGraphics();

Muss ich evtl. irgendwas am Graphics-Objekt ändern, nachdem ich die PreferredSize der JComponent geändert habe?

PS: Danke für Deine schnelle Antwort! 🙂
 
Ich bin absolut kein Experte in dem Bereich und hätte dir wohl auch eher helfen können, wenn es wirklich nur um die Größe der Zeichenfläche gegangen wäre. Nach mehr Informationen habe ich aber auch nicht nur für mich gefragt, die anderen hier sind dir für deinen zweiten Post vielleicht auch dankbar, weil es das ganze weiter spezifiziert.
Wenn die Skalierung der Zeichnung allerdings nicht klappt, kann ich dir höchstens sagen, wie ich das ganze angegangen wäre: Ich würde versuchen, das Bild Pixel für Pixel durchzugehen und auf ein neues Bild zu projezieren, dass dann am Ende auf die neue Zeichenfläche kopiert wird.
Java:
// Pseudocode
Bildformat altesBild = getAltesBild();
int width = getAltesBild().getWidth();
int height = getAltesBild().getHeight();
Bildformat neuesBild = new Bildformat(width * 2, height * 2);
for(int x = 0; x < width; x++) {
  for(int y = 0; y < height; y++) {
    Pixel pixel = new Pixel(altesBild.pixelAt(x, y));
    neuesBild.pixelAt(2x,     2y)     = pixel;
    neuesBild.pixelAt(2x + 1, 2y)     = pixel;
    neuesBild.pixelAt(2x,     2y + 1) = pixel;
    neuesBild.pixelAt(2x + 1, 2y + 1) = pixel;
  }
}
// Component anpassen und Bild draufkopieren
Habe das ganze jetzt nicht getestet, und bin auch nicht sicher, ob es vom Prinzip her so geht (oder ob es nicht viel einfacher oder besser geht), kann mir aber vorstellen, dass man es so machen kann.

Mit freundlichen Grüßen
Xelsarion
 

Zurück
Oben