无法在jframe中删除/添加jpanel

时间:2014-11-25 08:32:09

标签: java swing jframe jpanel

我遇到了一个问题,即我有一个JFrame,其中添加了2个JPanel,如图所示: enter image description here 在上图中,一个JPanel有一些JButton,第二个JPanel有一些表单字段,我想在第一个JPanel中点击JButtons时更改/(删除旧的并添加新的JPanel),如下所示: enter image description here

我有代码段:

myPanel.clickListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {

                    MainFrame.this.getContentPane().remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
                    MainFrame.this.getContentPane().add(twoPanel, BorderLayout.CENTER);
                    MainFrame.this.invalidate();
                    MainFrame.this.validate();
                }
            });


    myPanel.clickListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    MainFrame.this.getContentPane().remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
                    MainFrame.this.getContentPane().add(customerPanel, BorderLayout.CENTER);
                    MainFrame.this.invalidate();
                    MainFrame.this.validate();
                }
            });

            MainFrame.this.setMaximumSize(new Dimension(600, 550));
            MainFrame.this.setMinimumSize(new Dimension(599, 549));
            MainFrame.this.setSize(600, 550);
            MainFrame.this.setResizable(false);
            MainFrame.this.setVisible(true);
        }
    });

通过上面的代码,我可以添加新的JPanel,但无法删除第一个JPanel。

1 个答案:

答案 0 :(得分:2)

在我看来你应该使用CardLayout。 它允许您更改JPanel的可见性,因此这实际上就是您想要做的。 您为右侧定义了两个JPanel,然后在listner中为它们进行切换。

在这里查看示例: https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html