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