pack() bei null-Layout

stulleman

Bekanntes Mitglied
Hallo zusammen!
Ich ich habe eine Klasse die von JFrame erbt und eine die von JPanel erbt.
Ich füge dem JFrame jetzt das JPanel hinzu und rufe dann die pack() Methode auf, doch das Fenster bleibt klein! Das JFrame und das JPanel haben jeweils ein null-Layout.
Im JPanel setze ich die preferredSize.

Habe absolut keine ahnung warum das klein bleibt, vielleicht könnt ihr mir ja helfen!
 
Zuletzt bearbeitet von einem Moderator:
Wenn du null-layout verwendest hilft dir das setzen der preferredsize nichts. Auch nen pack() brauchst du nicht.
Beim null-layout musst du alle größen per hand setzen.

EDIT:
und noch was zum lesen: Java: Null Layout is Evil
 
Zuletzt bearbeitet von einem Moderator:
Wenn die Oberfläche so komplex ist, dass du dich genötigt siehst, das Null-Layout zu verwenden, solltest du entweder den Aufbau überdenken, oder es mit dem Gridbaglayout versuchen...
 
Du musst die Preferred Size des ContentPanes setzen.
Statt den GBL ist es in 99 % der Fälle sinnvoller, sich einen eigenen LayoutManager zu schreiben. Das setzen per size/location/bounds ist ja im Grunde genommen nichts anderes.
 
Ich bin auch so einer, der meist das NullLayout verwendet, habe jedoch vor, dies zu ändern.
Nun zu deinem Problem. Wenn du die Größe des JPanels mit setPrefferedSize(new Dimension(...)) bestimmst, sollte es eigentlich funktionieren.
Panel-Klasse (im Konstruktor):
Java:
// .....
setPreferredSize(new Dimension(600, 600));
setLayout(null);
add(buttonXy);
// add(weitere Komponenten)
// .....

Frame (im Konstruktor):
Java:
// .....
view = new View(new Model()); // view is ne Instanz deiner Panel-Klasse
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Mein JFrame");
setContentPane(view);
/*
 * Meiner Meinung nach schlechtere Alternative:
 * getContentPane().add(view);
 */
setVisible(true);
pack();
// .....
 
Ich bin auch so einer, der meist das NullLayout verwendet, habe jedoch vor, dies zu ändern.
Nun zu deinem Problem. Wenn du die Größe des JPanels mit setPrefferedSize(new Dimension(...)) bestimmst, sollte es eigentlich funktionieren.
Panel-Klasse (im Konstruktor):

Du hast das Problem nicht ganz verstanden. Bei deiner Methode hat dein Frame ein BorderLayout darum klappt setPrefSize, aber wenn du frame.setLayout(null) machst eben nicht mehr!!!

btw. setContenPane ist unnötig es reicht auch einfach add(view)

Wenn die Oberfläche so komplex ist, dass du dich genötigt siehst, das Null-Layout zu verwenden, solltest du entweder den Aufbau überdenken, oder es mit dem Gridbaglayout versuchen...

Naja ich finde das Gridbaglayout unnmöglich, lieber TableLayout oder FormLayout

Du musst die Preferred Size des ContentPanes setzen.

Soviel ich weiß nicht wenn das JFrame ein Nulllayout hat

Statt den GBL ist es in 99 % der Fälle sinnvoller, sich einen eigenen LayoutManager zu schreiben. Das setzen per size/location/bounds ist ja im Grunde genommen nichts anderes.

Finde ich nicht, hab noch nie einen eigenen LM schreiben müssen bin immer mit den vorhanden im Netz ausgekommen, meine Favoriten stehen ja oben 😉 und die reichen in 99% der Fälle aus...
 
Zuletzt bearbeitet von einem Moderator:
Hier noch ein visuelles Beispiel gegen Null-Layout. ^^
http://www.java-forum.org/awt-swing-swt/121870-windows-ubuntu.html


Finde ich nicht, hab noch nie einen eigenen LM schreiben müssen bin immer mit den vorhanden im Netz ausgekommen, meine Favoriten stehen ja oben 😉 und die reichen in 99% der Fälle aus...
Hm, ich schreibe mir fast immer einen eigenen. Aus dem Netz habe ich eigendlich noch nie einen verwendet. Macht einfach Spaß, ist schnell erledigt und man hat das was man will und kennt es sofort in und auswendig. ^^
 

Zurück
Oben