结构喜欢这个:
我有一个框架和两个按钮 - 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();
}
}
答案 0 :(得分:2)
您要将A.createPanel()
和B.createPanel()
添加到contentPane,但是将A
和B
存储在componentMap中。因此,当您致电this.getContentPane().remove((JPanel)o);
时,您正在A
和/或B
上执行此操作,这些内容不在内容窗格中,因此您不会删除任何内容。
如果要清除内容窗格,可以使用更简单/更安全的方法:
this.getContentPane().removeAll();