Weiß jemand wie man bei einem JFrame den Container ändert?

...komplette Frage anzeigen

3 Antworten

Wenn Du ein BorderLayout hast und du an derselben Stelle (CENTER) zwei Panels hinzufügst (add), existiert ein Widerspruch, der wahrscheinlich von Swing so aufgelöst wird, dass nur das Panel angezeigt wird, welches als erstes hinzugefügt wurde.

Du musst das vorherige Panel explizit entfernen (remove).

Antwort bewerten Vielen Dank für Deine Bewertung

Anhand deines Beispiels müsste es zumindest optisch den gewünschten Effekt bieten. Hier ein konkretes Beispiel:

JFrame frame = new JFrame();
frame.setContentPane(new JPanel(new BorderLayout()));
frame.getContentPane().add(new JLabel("Test1"), BorderLayout.CENTER);
frame.getContentPane().add(new JLabel("Test2"), BorderLayout.CENTER);
frame.setSize(100, 100);
frame.setVisible(true);

Allerdings verhält es sich anders, zu welchem Zeitpunkt du das add ausführst. - Was du anhand diesem Beispiel entnehmen kannst, sofern du das zweite add nach dem setVisible ausführst: Hier wirst du feststellen, dass sich die erste Komponente immer noch auf deinem Panel befindet.

Das liegt daran, dass sich mit der add Methode neue Elemente hinzufügen lassen, jedoch werden alte Elemente dabei nicht entfernt, dies solltest du machen. Da du allerdings hierfür nur die CENTER Komponente entfernen möchtest, braucht es etwas mehr.

Beispiel:

BorderLayout layout = (BorderLayout) frame.getContentPane().getLayout();

frame.getContentPane().remove(layout.getLayoutComponent(BorderLayout.CENTER));
Antwort bewerten Vielen Dank für Deine Bewertung

Die add-Methode fügt, wie der Name schon sagt, das neue Panel zu dem Container hinzu. Ich vermute, dass du das erste Panel erst entfernen musst und dann das zweite hinzufügen musst, damit das gewünschte Verhalten entsteht.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?