如何清空此面板并添加新面板

时间:2011-04-21 09:18:52

标签: java swing

我有一个主JPanel容器和三个JPanels。如何清空此面板并添加新面板?我尝试使用remove(Component),但它不起作用。有人可以给我建议吗?

6 个答案:

答案 0 :(得分:3)

这样做。诀窍是调用revalidate。

mainPanel = ...

mainPanel.removeAll();
mainPanel.add(newPanel1);
mainPanel.add(newPanel2);
mainPanel.add(newPanel3);
mainPanel.revalidate();  

但实际上,如果您想更改JPanel中显示的内容,请考虑使用CardLayout。

答案 1 :(得分:2)

在这个link中,我找到了一个关于如何在面板中添加和删除元素的简单教程。 主面板内的其他面板也是元素,因此同样的原则适用于它们。

在面板中添加新内容时的一个好习惯不仅仅是使用方法add(): 我们可能还想使用 revalidate() repaint()当某些事件发生时(按钮点击或类似...),应该调用它们。

另外我想提一下,在教程remove()我用来删除元素,你正在正确地做。也许再次调用其他面板的 revalidate() repaint()会使删除的面板从GUI中消失(删除对象时只删除GUI)

注意:我认为内部面板的元素是visible = true。如果某些内部元素难以渲染,请尝试同时调用 revalidate()重绘()。 我认为这种方式应该有效。

答案 2 :(得分:1)

尝试其他移除方法remove(int index);

答案 3 :(得分:1)

@ Harry Joy

如果您添加或删除(已经可见的容器),则必须调用

revalidate(); repaint(); // not required in all cases

@Damir 如果JComponents不是公共(或私有)静态,那么你可以调用

myContainer.removeAll();
myContainer.revalidate();
nyCOntainer.repaint();

可能是JComponent某个参数删除Component[] a = myContainer.getComponents();(s)然后你可以调用if (components[i] instanceof JComboBox) { ...

答案 4 :(得分:1)

这有效100%

this.panelname.Controls.Clear();

答案 5 :(得分:0)

我也有同样的问题。我所做的就是解决这个问题

panelName.setVisible(false);
mainPanel.remove(panelName);

在我的例子中,panelName是一个位于mainPanel内的JPanel。