删除动态添加的面板

时间:2015-06-02 15:14:14

标签: java swing java-7

在之前的问题中,我询问了如何添加动态panels,并且在Stackoverflow成员的帮助下,我可以实现我的目标。

public class Reference {
            JFrame frame = new JFrame();
            MainPanel main;  
            JButton addButton = new JButton();
            JButton removeButton = new JButton();
            List<SubPanel> subPanels = new ArrayList<SubPanel>();

            public static void main(String[] args) {
               new Reference();      
            }

            public Reference() {
                main = new MainPanel();
                frame.add(main);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(addButton, BorderLayout.EAST);
                frame.add(removeButton, BorderLayout.WEST);
                frame.pack();
                frame.setVisible(true);

                addButton.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent evt) {
                           main.addSubPanel();
                           main.revalidate();
                        }
                    });        
            }
            private class SubPanel extends JPanel {         
               JTextField firstName = new JTextField(15);

            public SubPanel() {
                this.add(firstName);
           }

          public class MainPanel extends JPanel {
            public MainPanel() {
            }

            public void addSubPanel() {
                SubPanel panel = new SubPanel();           
                add(panel);
                subPanels.add(panel);
            }

          }  
        }

但是,我无法动态删除的下一个问题是panels。我尝试了很多方法但没有成功。

我尝试在removeSubPanel中使用MainPanel方法:

         public void removeSubPanel() {
           this.getParent().remove(SubPanel);
  }

对于removeButton此代码:

                  removeButton.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent evt) {
                           main.removeSubPanel();
                           main.revalidate();
                    }
                });

我无法理解什么是错的。可能removeButton actionlistener不正确。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

在您的MainPanel课程中:Services Summary... Service "orcl.168.0.104" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB.168.0.104" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully 。这会添加变量&#39; panel&#39;引用的组件。到了这个&#34;这个&#34; MainPanel的实例。

使用代码add(panel);,您尝试从MainPanel实例的父级中删除组件。 (另请注意,变量this.getParent().remove(SubPanel);永远不会在您提供的代码中定义)您需要从实际包含它的组件中删除该组件。由于MainPanel类中的add方法已添加到SubPanel,因此您需要从this中删除remove方法:

this

您还需要决定在单击按钮时如何选择要删除的组件。也许是你存储在列表中的第一个?

public void removeSubPanel(final JComponent subPanel) {
   this.remove(subPanel);
}
相关问题