Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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]

Geschrieben

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 :)

Geschrieben
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.

Geschrieben

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!

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...