# JPanel mit Layout(null) in JPanel



## Ariovist (26. Mrz 2009)

Hallo zusammen,

ich habe folgendes Problem: Ich habe JPanels denen mit *null*-Layout. Diese möchte ich nun in einem JPanel mit einen anderen Layout, bspw. BorderLayout anordnen. Das Problem ist nun, dass diese nicht angezeigt werden. Setzt man das Layout nicht auf *null*, klappt es.

Hier ein Minimalbeispiel:

```
import java.awt.BorderLayout;
import javax.swing.*;


public class Spielwiese extends JFrame{
    public static void main(String[] Args){
        Spielwiese sf = new Spielwiese();
    }
    public Spielwiese() {
        super("Spielwiese");
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
        JPanel panel = new JPanel();
        JPanel subPanel = new JPanel();
        
        subPanel.setLayout(null);
        
        JButton jbutton = new JButton("test");
        jbutton.setBounds(10,10,80,80);
        
        subPanel.add(jbutton);
        
        panel.setLayout(new BorderLayout());
        panel.add(subPanel,BorderLayout.SOUTH);

        add(panel);
        setSize(600,800);
        setVisible(true);
    }
}
```
Ausprobiert habe ich, dass _subPanel_ mittels add(subPanel) direkt hinzuzufügen, also nicht dem _panel_. Das geht, will ich aber nicht.

Bei der Suche im Internet habe ich sehr oft gelesen, wie schlecht das Layout *null* ist, fast immer war dort die Lösung, sich davon zu trennen. Das ist in meinem Fall leider nicht möglich.

Hat jemand eine Idee?

Vielen Dank im Voraus,

beste Grüße


----------



## max40 (26. Mrz 2009)

da du ihm dem layout manager entzogen hast, musst du dich selbst um die size kümmern z.B. mit
subPanel.setPreferredSize(new Dimension(100, 100));

und wenn du schon weist was für ein Layout dein Panel hat kannst du auch folgendes machen:

final JPanel panel = new JPanel(new BorderLayout());
final JPanel subPanel = new JPanel(null);

statt 
final JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
final JPanel subPanel = new JPanel();
panel.setLayout(null);

da durch sparst 2 mal FlowLayout zu erzeugen


----------



## Ariovist (26. Mrz 2009)

Hallo max40,

vielen herzlichen Dank für diese schnelle Antwort, es funktioniert  Und dann noch so schön wenig Aufwand, mit nur einer Zeile, super! :applaus:

Beste Grüße


----------



## max40 (26. Mrz 2009)

Ariovist hat gesagt.:


> Bei der Suche im Internet habe ich sehr oft gelesen, wie schlecht das Layout *null* ist, fast immer war dort die Lösung, sich davon zu trennen. Das ist in meinem Fall leider nicht möglich.



Mich würde noch interessieren warum es bei dir nicht möglich ist ?!


----------



## Ariovist (26. Mrz 2009)

Ich weiß, absolut unmöglich ist es nicht, irgendwie geht's ja immer.
Ziel ist es, Berechnungen zu veranschaulichen. Dazu habe ich Formeln in Form von Bildern eingebunden. An bestimmten Stelle erscheinen nun berechnete Werte. Die Formeln sind etwas zu aufwendig, als das ich sie mit Java darstellen wollte, LaTex kann das etwas besser...
Nun, wenn ich bei der Aufteilung im Panel etwas nicht selber mit setBounds() festlege, so habe ich keinen Erfolg damit gehabt, dass bei einem Layoutmanager die Werte exakt an der Stelle stehen, wo sie hin sollen, egal, wie groß das Fenster ist.


----------

