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