Ändern Sie den Inhalt von Frame nach dem Klicken auf die Schaltfläche

7

Ich möchte den Inhalt eines JFrames festlegen können, nachdem auf eine Schaltfläche in einem der JPanels dieses Rahmens geklickt wurde.

Meine Architektur besteht aus einem Controller, der den JFrame und das erste JPanel darin erstellt. Aus dem ersten JPanel rufe ich eine Methode an: setcontentpane (JPanel jpanel) auf dem Controller. Anstatt jedoch das übergebene JPanel zu laden, werden nur alle Panels entfernt (siehe Code unten).

ActionListener innerhalb des ersten JPanels:

%Vor%

Controller:

%Vor%

Kann mir jemand sagen, was ich falsch mache? Danke:)

    
Julian 15.05.2011, 20:07
quelle

3 Antworten

16

Aufruf erneut validieren, dann neu streichen. Dies teilt den Layout-Managern mit, ihre Layouts ihrer Komponenten zu erstellen:

%Vor%

Besser, wenn Sie nur JPanels tauschen wollen, ist ein CardLayout zu verwenden und es die schmutzige Arbeit machen zu lassen.

    
Hovercraft Full Of Eels 15.05.2011, 20:14
quelle
3

Ich habe einen Weg gefunden, das zu tun, was ich oben skizziert habe.

Implementieren der setpanel-Methode wie folgt:

%Vor%

hat in meinem Fall den Trick gemacht.

Ich bin mir ziemlich sicher, dass ich noch etwas in meinem Code beheben muss (bezüglich Layout-Managern und bevorzugten Größen, da pack () das Fenster immer noch verkleinert), aber zumindest funktioniert die oben beschriebene Methode wie folgt:)

    
Julian 15.05.2011 23:21
quelle
2

Immer wenn Sie die Containment-Hierarchie eines Frames ändern, müssen Sie pack() aufrufen.

Aus der Dokumentation:

  

Veranlasst die Anpassung dieses Fensters   die bevorzugte Größe und Layouts seiner   Unterkomponenten. [...] Das Fenster wird   nach der preferredSize validiert werden   ist berechnet.

    
Anon 15.05.2011 20:14
quelle

Tags und Links