从JPanel动态删除Component

时间:2011-08-19 05:31:53

标签: java swing jpanel

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

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

JPanel j = new JPanel();

JButton btn1 = new JButton();

JButton btn2 = new JButton();

j.add(btn1);

j.add(btn2);

j.remove(btn1);

答案 1 :(得分:8)

有趣的是,我遇到了同样的问题,我很惊讶人们正在提出另一个答案,因为他显然是在询问动态创建的组件,而不是已经在变量名称下创建的组件。可以获得,而不是匿名创建的对象。

答案很简单。使用 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();