JFrame und JPanel - Unschönheiten

Status
Nicht offen für weitere Antworten.

raven

Bekanntes Mitglied
Hallo...
Ich habe mal wieder seit einer Weile zwei Frage, was JFrame und JPanel betrifft.

1) Ich habe bei den erstellen eines JFrames und das überschreiben der paintComponent() bemerkt, wenn ich an der Koordinate 0,0 anfange irgendetwas zu zeichnen, das die x-Koordinate alles schön und gut funktioniert, aber leider das gezeichnete durch in der y-Richtung von dar Titelleiste ein wenig verschluckt wird. Meine Frage wie kann ich die Höhe, die auf jeden System bzw. bei jeden Look n' Feel anders sein kann, der Titelleiste ermitteln. Also gibt es da eine Methode um dann genau, mein gezeichnetes um die Höhe der Titelleiste nach unten zu versetzten. Damit mein gezeichnetes nicht von der Titelleiste überdeckt wird.

2) Die zweite Frage betrifft das JPanel. Wenn ich ein JPanel auf ein JFrame adde. Und ich die Höhe und Breite mit getHeight() und getWidth() ermitteln will, dann ist diese zu dem Zeitpunkt(um Konstruktor) noch null. Ich erhalte erst die richtigen Werte, wenn ich diese Ermittlung in die paint-Methode verlagere. Wie kann ich dies umgehen, das ich bereits kurz nach dem adden des Panels die Werte ermitteln kann?


Dies sind für manche zwar Kleinigkeiten, jdoch empfinde ich dieses als störend...

Hoffe einige von euch können mir Helfen, wenn es davür überhaupt eine Lösung gibt.

mfg raven
 

Marco13

Top Contributor
JFrame hat keine paintComponent-Methode. Im Allgemeinen empfihelt es sich, einem JFrame nicht zu sehr ins Handwerk zu pfuschen, und als oberste Component, in der man SELBST paintet (d.h. in der main PaintComponent überschreibt) eine JPanel zu verwenden, das man ins ContentPane des JFrames legt (oder manchmal auch als das ContentPane des JFrames einsetzt).

Die Sache mit der Größe: Man erhält zu jedem beliebiegen Zeitpunkt die aktuelle Größe eines JPanels mit panel.getWidth() und panel.getHeight() (bzw. getSize() und so). Warum willst du die nochmal zwischenspeichern? Das KÖNNTE man machen - man müßte die zwischengespeicherten Werte aber bei jeder Änderung aktualisieren (mit einem ComponentListener), aber ich kann mir spontan nicht vorstellen, warum man das tun sollte...
 

Ebenius

Top Contributor
1) Ich habe bei den erstellen eines JFrames und das überschreiben der paintComponent() bemerkt, wenn ich an der Koordinate 0,0 anfange irgendetwas zu zeichnen, das die x-Koordinate alles schön und gut funktioniert, aber leider das gezeichnete durch in der y-Richtung von dar Titelleiste ein wenig verschluckt wird. Meine Frage wie kann ich die Höhe, die auf jeden System bzw. bei jeden Look n' Feel anders sein kann, der Titelleiste ermitteln. Also gibt es da eine Methode um dann genau, mein gezeichnetes um die Höhe der Titelleiste nach unten zu versetzten. Damit mein gezeichnetes nicht von der Titelleiste überdeckt wird.
Am besten gar nicht die paintComponents()-Methode des JFrames überschreiben, sondern ein JPanel machen, dessen paintComponent()-Methode überschreiben und dann als ContentPane auf das JFrame. Damit umgehst Du dieses Problem.

2) Die zweite Frage betrifft das JPanel. Wenn ich ein JPanel auf ein JFrame adde. Und ich die Höhe und Breite mit getHeight() und getWidth() ermitteln will, dann ist diese zu dem Zeitpunkt(um Konstruktor) noch null. Ich erhalte erst die richtigen Werte, wenn ich diese Ermittlung in die paint-Methode verlagere. Wie kann ich dies umgehen, das ich bereits kurz nach dem adden des Panels die Werte ermitteln kann?
Die Größe einer Komponente bestimmt sich, wenn die gesamte Komponenthierarchie vom Fenster bis zu jedem angezeigten Kind validiert wird. So richtig umgehen kann man das beim Erzeugen einer Komponente gar nicht, da deren Parent dafür zuständig ist die Größe zu setzen. Und der kann ja zum Zeitpunkt der Erzeugung des Kindes -- also im Konstruktor während dieses noch gar nicht fertig erzeugt ist -- nicht wissen, wie groß er das Kind gern hätte. Die tatsächliche Größe beim Zeichnen abzufragen ist eigentlich der richtige Weg. Wozu benötigst Du die Größe denn vorher?

Ebenius
 

raven

Bekanntes Mitglied
Wozu benötigst Du die Größe denn vorher?

Ebenius
Mich hat das einfach vorher gestört, das in der painComponet zu erledigen, aber wenn es nicht anders geht, dann werde ich es auch weiterhin so machen...



JFrame hat keine paintComponent-Methode. Im Allgemeinen empfihelt es sich, einem JFrame nicht zu sehr ins Handwerk zu pfuschen, und als oberste Component, in der man SELBST paintet (d.h. in der main PaintComponent überschreibt) eine JPanel zu verwenden, das man ins ContentPane des JFrames legt (oder manchmal auch als das ContentPane des JFrames einsetzt).

Die Sache mit der Größe: Man erhält zu jedem beliebiegen Zeitpunkt die aktuelle Größe eines JPanels mit panel.getWidth() und panel.getHeight() (bzw. getSize() und so). Warum willst du die nochmal zwischenspeichern? Das KÖNNTE man machen - man müßte die zwischengespeicherten Werte aber bei jeder Änderung aktualisieren (mit einem ComponentListener), aber ich kann mir spontan nicht vorstellen, warum man das tun sollte...

naja eigentlich hatte ich ja auch JPanel also im Frame udn die paintComponent vom JPanel überschrieben, war nur biss unglücklich formuliert. Aber dadurch wird mein gezeichnetes doch immer noch von der Titelleiste überdeckt.
 

Ebenius

Top Contributor
Dann ist natürlich alles anders. :) Hast Du einen Border auf dem Panel? Dann musst Du mit getInsets() die Insets holen und left/top auf x/y aufrechnen und left+right/top+bottom von width/height abziehen.

Ansonsten: Kannste mal ein einfaches ausführbares Beispiel zusammenbasteln? Einfach eine schräge Linie in einem JPanel auf einem JFrame mit dem genau das passiert.

Ebenius
 

Marco13

Top Contributor
Mit getInsets auf dem JFrame bekommt man AFAIK genau die Größe von Titelleiste und Rand und so... aber das sollte nicht notwendig sein, wenn das JPanel im ContentPanel liegt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
A Externes JFrame in ein JPanel AWT, Swing, JavaFX & SWT 5
O Swing Jpanel autom. auf JFrame Größe bringen AWT, Swing, JavaFX & SWT 6
B JFrame mit neuem JPanel überschreiben AWT, Swing, JavaFX & SWT 13
B Verschachtelte jframe oder jpanel mit backgrounds AWT, Swing, JavaFX & SWT 10
H Swing JFrame und JPanel Problematik AWT, Swing, JavaFX & SWT 9
G 2D-Grafik JFrame & JPanel im Vollbild AWT, Swing, JavaFX & SWT 2
M Swing Daten von JPanel zu JFrame senden AWT, Swing, JavaFX & SWT 13
M Swing Scrollbar im JFrame (JPanel?) AWT, Swing, JavaFX & SWT 6
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
J JPanel vs JFrame Längeneinheit AWT, Swing, JavaFX & SWT 3
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
E JPanel in JFrame integrieren AWT, Swing, JavaFX & SWT 3
M JPanel an JFrame anpassen AWT, Swing, JavaFX & SWT 7
F jpanel oder jframe Formular AWT, Swing, JavaFX & SWT 4
C Swing JPanel Größe relativ zum JFrame AWT, Swing, JavaFX & SWT 9
R JPanel auf JFrame neu zeichnen AWT, Swing, JavaFX & SWT 11
V JFrame in JPanel positionieren AWT, Swing, JavaFX & SWT 5
A JFrame > JTabbedPane > JPanel > addKeyListener AWT, Swing, JavaFX & SWT 18
N JPanel zum JFrame hinzufügen AWT, Swing, JavaFX & SWT 9
C JFrame nach JPanel abfragen AWT, Swing, JavaFX & SWT 6
V Zeichnen auf JPanel und in JFrame einfügen AWT, Swing, JavaFX & SWT 16
H Swing jpanel in jframe erzeugen und anzeigen AWT, Swing, JavaFX & SWT 5
G JFrame ohne JPanel AWT, Swing, JavaFX & SWT 5
thE_29 Bufferungsproblem JFrame/JPanel/ContentPane AWT, Swing, JavaFX & SWT 2
S JFrame-Klasse soll ein/mehrere Objekte einer JPanel-Klasse-& AWT, Swing, JavaFX & SWT 3
R per Mausclick JPanel tauschen in JFrame AWT, Swing, JavaFX & SWT 4
E JPanel aus auf dem JFrame AWT, Swing, JavaFX & SWT 6
M JScrollPane im JPanel im JFrame SWING AWT, Swing, JavaFX & SWT 4
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
G JFrame,JPanel,JTextField und KeyListener AWT, Swing, JavaFX & SWT 6
E Bestehende Anwendung erweitern ->JFrame in JPanel verpack AWT, Swing, JavaFX & SWT 4
T Editor auf Basis JFrame in ein JPanel wandeln - Problem! AWT, Swing, JavaFX & SWT 5
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
P leidige Frage zum JPanel und zum JFrame AWT, Swing, JavaFX & SWT 6
G Probleme mit JProgressbar auf JPanel in JFrame AWT, Swing, JavaFX & SWT 6
G JPanel laedt nur bei JFrame Größenveränderung AWT, Swing, JavaFX & SWT 3
K jPanel in jFrame AWT, Swing, JavaFX & SWT 4
P JPanel in ein JFrame einfügen AWT, Swing, JavaFX & SWT 6
R NetBeans - JFrame und JPanel AWT, Swing, JavaFX & SWT 3
G Hintergrundbild auf JFrame oder JPanel AWT, Swing, JavaFX & SWT 3
A Swing JFrame / JPanel Grösse soll sich nach Inhalt richten. AWT, Swing, JavaFX & SWT 2
G JFrame auf JFrame oder JPanel auf JFrame AWT, Swing, JavaFX & SWT 1
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben