Größe eines JPanels mit überschriebener paintComponent

itsmemario

Grünschnabel
Hallo erstmal und Entschuldigung für den nichtssagenden Titel, aber ich weiss beim besten Willen nicht, wie ich das Problem in einer Zeile hätte zutreffender beschreiben können.

Hintergrund:
Ich habe eine Klasse erstellt, die von JPanel erbt und ein 2D Koordinatensystem repräsentiert. Das Koordinatensystem funktioniert einwandfrei auch was den Ursprung, evtl. Skalierungen etc. betrifft. Falls jemand damit zufällig Probleme haben sollte, dieser Thread war sehr hilfreich für mich:
http://www.tutorials.de/forum/java/251903-graphics2d-mathematisches-koordinatensystem.html

Problem:
Wenn ein Benutzer dieser Klasse das Koordinatensystem (JPanel) zu seinem JFrame hinzufügen will (z.B. über
Code:
frame.add(new coord2D(), BorderLayout.CENTER);
) will ich, dass sich das Koordinatensystem genau dem zur Verfügung stehenden Platz anpasst. Die Skalierung des gezeichneten Koordinatensystems ist prinzipiell über
Code:
AffineTransform.getScaleInstance()
möglich. Das Problem hierbei ist allerdings, dass ich für die Skalierung eine Größenangabe brauche, die ich nicht habe. Bsp: wenn das Fenster maximiert wird (und dadurch der Bereich BorderLayout.CENTER wächst) soll auch das Koordinatensystem mitwachsen. Momentan bliebe das Koordinatensystem gleich groß und ein Großteil der Fläche wäre verschwendet. Das Problem ist wie bereits angesprochen, dass ich für die Skalierung meines Koordinatensystems eine Größenanagabe brauche. Die Methoden getBounds(), getSize(), getPreferredSize() haben mich allerdings nicht weiter gebracht.

Ich versuch's nochmal ein wenig verständlicher zu formulieren:
Man stelle sich ein JPanel mit überschriebener paintComponent() Methode vor, in der eine horizontale Linie über fast die gesamt Breite des JPanels gezeichnet wird, z.B. folgendermaßen:
Code:
g.drawLine(5, 5, breite-5, 5)
. D.h. ganz links und ganz rechts sollen jeweils 5 Pixel von der Linie nicht betroffen sein. Wenn im übergeordneten JFrame jetzt nur Platz für JPanel der Größe 15x15 ist, wird die Linie halt 5 Pixel breit, wenn Platz für 25x25 ist, wird die Linie halt 20 Pixel breit. Das Problem ist: Wie kann ich meine Variable
Code:
size
belegen? Woher weiss ich wie viel Platz im JFrame zur Verfügung steht?

Für Hilfe wäre ich wirklich sehr sehr dankbar
 
Hab' die Lösung gefunden. Für die, die's interessiert:

Im Konstruktor der Unterklasse von JPanel liefert ein Aufruf von getHeight()/getWidth() den Wert 0 zurück. In der Methode paintComponent() liefert getHeight()/getWidth() dann aber den tatsächlichen Wert zurück.
 
Zurück