構造は次のようになります。
フレームと 2 つのボタンがあります - btnA、btnB
btnA を押すと、createPanel() 関数は、フレームに表示される panelA を返します。
btnBもそうです。
btnA と btnB を切り替えることができます。
パネルをフレームに追加する前に、clearPanel() 関数を使用して、フレーム内の既存のパネルをクリアします。
しかし問題は、パネルのサイズを変更したりクリックしたりすると、すでに削除されているはずの以前のパネルが表示されることです。
私が失ったものはありますか?
public void actionPerformed(ActionEvent e) {
String buttonString = e.getActionCommand();
if (buttonString.equals("A")) {
clearPanel();
A = new APanel();
this.getContentPane().add(A.createPanel(), BorderLayout.CENTER);
this.pack();
componentMap.put("A", A);
btnB.setEnabled(true);
btnA.setEnabled(false);
}
else if (buttonString.equals("B")) {
clearPanel();
chart = new BPanel();
this.getContentPane().add(B.createPanel(), BorderLayout.CENTER);
this.pack();
componentMap.put("B", B);
btnA.setEnabled(true);
btnB.setEnabled(false);
}
}
private void clearPanel() {
if (!componentMap.isEmpty()) { // I store panels in a HashMap
for (Object o: componentMap.values()) {
this.getContentPane().remove((JPanel)o);
}
this.getContentPane().invalidate();
componentMap.clear();
}
}