1

结构如下:

我有一个框架和两个按钮 - 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();
    }
}
4

1 回答 1

2

您正在向contentPane添加A.createPanel()和,但您将和存储在您的 componentMap 中。因此,当您调用 时,您是在和/或不在内容窗格中执行此操作,因此您不会删除任何内容。B.createPanel()ABthis.getContentPane().remove((JPanel)o);AB

如果要清除内容窗格,可以使用更简单/更安全的方法:

this.getContentPane().removeAll();
于 2012-05-29T07:18:59.720 回答