2011-08-19 80 views
7

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

我该如何解决这个问题?

+3

请发表您的代码,以便我们可以提供帮助。 –

+6

为了更好地提供帮助,请包括[SSCCE](http://www.sscce.org) – mre

+3

您是否正在使用“public void remove(int index)”而不是“public void remove(Component comp)”?如果您想要更好的答案,请发布SSCCE。 –

回答

6

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

JPanel j = new JPanel(); 

JButton btn1 = new JButton(); 

JButton btn2 = new JButton(); 

j.add(btn1); 

j.add(btn2); 

j.remove(btn1); 
3

有趣的是,我在同样的问题来了,我很惊讶人们upvoting对方的回答,因为他清楚地询问动态创建的组件,而不是下一个变量名已创建的组件这是可以获得的,而不是匿名创建的对象。

答案很简单。使用 getComponents()来遍历添加到JPanel的组件数组。例如,使用instanceof查找要删除的组件类型。在我的例子中,我删除了添加到我的JPanel的所有JCheckBox。

Make sure to revalidate and repaint your panel, otherwise changes will not appear

组件是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();