动态从JPanel中移除组件

18

我正在动态地向 JPanel 中添加和删除组件。添加和删除功能都正常工作,但是当我删除组件时,它会删除最后一个组件而不是要删除的组件。

我该如何解决这个问题?


4
请发布您的代码以便我们提供帮助。 - Nate W.
7
为了更快地得到更好的帮助,请包含一个SSCCE - mre
3
你是否在使用"public void remove(int index)"这个方法,而不是"public void remove(Component comp)"?如果你想得到更好的答案,请提供一个SSCCE(小、自包含、可执行的代码示例)。 - Santosh Tiwari
+1 对于 CardLayout - 如果您有一组需要在不同时间显示的组件,则可以使生活更加轻松。 感谢 @Andrew 提醒我。 - Paul
2个回答

24

有趣的是,我碰到了同样的问题,并且惊讶地发现人们正在为另一个答案点赞,因为他明显在询问动态创建组件的问题,而不是已经创建好并可以通过变量名获取的组件,也不是匿名创建的对象。

答案很简单。使用getComponents()遍历添加到JPanel中的组件数组。例如,可以使用instanceof找到要删除的组件类型。在我的例子中,我移除了添加到我的JPanel中的任何JCheckBoxes。

确保重新验证和重绘面板,否则更改将不会出现

Component来自于java.awt.Component.

//Get the components in the panel
Component[] componentList = panelName.getComponents();

//Loop through the components
for(Component c : componentList){

    //Find the components you want to remove
    if(c instanceof JCheckBox){

        //Remove it
        clientPanel.remove(c);
    }
}

//IMPORTANT
panelName.revalidate();
panelName.repaint();

2
重新验证位对我很有用。有趣的是,在使用特定组件初始化面板后,我在第一次重新验证时不需要repaint()。在随后的重新验证中,我也需要repaint()。 - Akshay Gaur

11

通过使用方法 Container.remove(Component),您可以从容器中移除任何组件。例如:

JPanel j = new JPanel();

JButton btn1 = new JButton();

JButton btn2 = new JButton();

j.add(btn1);

j.add(btn2);

j.remove(btn1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接