# pack() bei null-Layout



## stulleman (20. Jul 2011)

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!


----------



## Gast2 (20. Jul 2011)

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


----------



## Gast2 (20. Jul 2011)

stulleman hat gesagt.:


> Habe absolut keine ahnung warum das klein bleibt, vielleicht könnt ihr mir ja helfen!



Benutze nen LayoutManager immer zu empfehlen...

Ansonsten musst du setBounds,setLocation,setSize verwenden


----------



## Hachmed (20. Jul 2011)

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


----------



## Volvagia (20. Jul 2011)

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.


----------



## GUI-Programmer (20. Jul 2011)

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

```
// .....
setPreferredSize(new Dimension(600, 600));
setLayout(null);
add(buttonXy);
// add(weitere Komponenten)
// .....
```

Frame (im Konstruktor):

```
// .....
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();
// .....
```


----------



## Gast2 (21. Jul 2011)

GUI-Programmer hat gesagt.:


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



Hachmed hat gesagt.:


> 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



Volvagia hat gesagt.:


> Du musst die Preferred Size des ContentPanes setzen.



Soviel ich weiß nicht wenn das JFrame ein Nulllayout hat



Volvagia hat gesagt.:


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


----------



## stulleman (21. Jul 2011)

Gut danke, weiß jetzt das ich kein null-Layout benutzen soll (;


----------



## Volvagia (21. Jul 2011)

Hier noch ein visuelles Beispiel gegen Null-Layout. ^^
http://www.java-forum.org/awt-swing-swt/121870-windows-ubuntu.html




SirWayne hat gesagt.:


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


----------



## wkt (21. Jul 2011)

Volvagia hat gesagt.:


> Macht einfach Spaß, ist schnell erledigt und man hat das was man will und kennt es sofort in und auswendig. ^^



Würde mich auch interessieren wie man so was macht.

Hast Du irgendwelche Informationsquellen wie man so was angehen könnte ?


----------



## Volvagia (21. Jul 2011)

Im FAQ gibt es ein Übersichtstutorial. Ist aber quasi nur die Grundlage, bin gerade am überarbeiten.


----------

