azett Geschrieben 4. Juli 2005 Teilen Geschrieben 4. Juli 2005 Hallo zusammen, ich baue mir ein JFrame und setze ein JPanel als ContentPane. Das ContentPane bekommt eine feste Größe. Das JFrame soll nun so breit und so hoch wie das ContentPane sein, plus Insets des JFrames. Mein Problem ist: Wenn ich das JFrame erstellt habe, sind all seine Insets angeblich 0. Da es nun genauso groß ist wie sein ContentPane, aber noch Platz für Rahmen und Titelleiste braucht, geht mir die komplette Optik in die Binsen. Lasse ich mir allerdings zunächst einen MessageDialog anzeigen, kennt es danach seine Insets auf einmal, und alles wird wie gewünscht angezeigt. Woran liegt das und wie schaffe ich Abhilfe? Ich habe ausgiebigst im Netz gesucht, aber keine Lösung gefunden. Vielleicht hab ich mich auch zu sehr verrannt, und die Lösung ist ganz simpel...? Vielen Dank schonmal für eure Hilfe! ..azett public class MeinFrame extends JFrame { public MeinFrame() { super(); MeinPanel panel = new MeinPanel(); setContentPane(panel); JOptionPane.showMessageDialog(this, "Zusätzlicher Dialog"); Insets myInsets = this.getInsets(); int myWidth = this.getContentPane().getWidth() + myInsets.left + myInsets.right; int myHeight = this.getContentPane().getHeight() + myInsets.top + myInsets.bottom; this.setSize(myWidth, myHeight); this.setVisible(true); } public class MeinPanel extends JPanel { public MeinPanel() { // GUI-Elemente... this.setSize(400,200); this.setVisible(true); } } public static void main(String[] args) { MeinFrame neu = new MeinFrame(); } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Magistrat_Natus Geschrieben 5. Juli 2005 Teilen Geschrieben 5. Juli 2005 Da gibt es eine schöne Methode eines jeden JFrames. Schimpft sich pack Schreib einfach ... this.pack(); this.setVisible(true); ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
azett Geschrieben 5. Juli 2005 Autor Teilen Geschrieben 5. Juli 2005 Jau, aber ich verwende ein Null-Layout auf dem ContentPane - pack() staucht mir das gesamte Programmfenster auf die Titelleiste zusammen. Zumal ich mir dann immer noch die Frage stelle, warum das JFrame seine Insets zunächst mit 0 angibt... Aber trotzdem vielen Dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 5. Juli 2005 Teilen Geschrieben 5. Juli 2005 Zumal ich mir dann immer noch die Frage stelle, warum das JFrame seine Insets zunächst mit 0 angibt...Weil es genau so in der Doku steht: The size of the frame includes any area designated for the border. The dimensions of the border area may be obtained using the getInsets method, however, since these dimensions are platform-dependent, a valid insets value cannot be obtained until the frame is made displayable by either calling pack or show. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
azett Geschrieben 5. Juli 2005 Autor Teilen Geschrieben 5. Juli 2005 Alles klar, das isset. Habe nun das pack() vor getInsets() gesetzt statt dahinter, dann tut es so, wie's soll. Danke für den Hinweis! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.