Ersetzen JPanel mit JPanel in einem JFrame
Ich habe eine Klasse extends JFrame, und es hat ein BorderLayout. Es verfügt über zwei private Instanzvariablen vom Typ JPanel. Sie repräsentieren panels Tasten und aufgerufen werden flipButton und confidenceButtons. Wenn Sie auf die Schaltfläche klicken, wird das Bedienfeld der Tasten wird durch die andere ersetzt-panel-Tasten. Das ist, wenn Sie auf eine Schaltfläche klicken in flipButton, flipButton wird ersetzt durch confidenceButtons. Ich habe versucht, es zu tun mögen dieses:
private Klasse FlipListener implements ActionListener{ public void actionPerformed(ActionEvent e){ entfernen(flipButton); add(confidenceButtons,BorderLayout.SOUTH); validate(); ... } } private class ColorListener implements ActionListener{ ... public void actionPerformed(ActionEvent e){ ... entfernen(confidenceButtons); add(flipButton,BorderLayout.SOUTH); validate(); } }
Schaltflächen in flipButton haben FlipListeners und diejenigen, die in confidenceButtons haben ColorListeners. Wenn das Programm ausgeführt wird, klicken Sie auf eine Schaltfläche, wird entfernen Sie die Rückseite, aber nichts ist Hinzugefügt, um es zu ersetzen. Was mache ich falsch?
BEARBEITEN
CardLayout stellte sich heraus, um eine einfache und einfache Lösung. Es stellt sich heraus, dass der obige code funktioniert; das problem war ein Tippfehler in einem anderen Teil von meinem code. >.< Aber ich hatte schon immer Probleme mit diesen Methoden, und CardLayout finde ich, vereinfacht es für mich. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden CardLayout, wie gezeigt hier.
revalidate() + repaint() sollte trick, Beispiel hier
EDIT:
Gefühl, dass Sie haben problem mit, dass, Beispiele für, dass hier und hier und wieder Beispiel von trashgod, fühlen Sie sich frei, um gebaut, Ihre Frage basiert auf code erneut
andere Möglichkeit ist, sich excelent Beispiel Hinzugefügt von Andrew Thompson 🙂 +1
versuchen Sie es mit getContentPane() aufrufen, um remove() ,add () - Methoden, ect..:
Bearbeiten:
dieser code FALTENBALG für mich arbeiten: