我遇到了一个问题,即我有一个JFrame,其中添加了2个JPanel,如图所示: 在上图中,一个JPanel有一些JButton,第二个JPanel有一些表单字段,我想在第一个JPanel中点击JButtons时更改/(删除旧的并添加新的JPanel),如下所示:
我有代码段:
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。
答案 0 :(得分:2)
在我看来你应该使用CardLayout。 它允许您更改JPanel的可见性,因此这实际上就是您想要做的。 您为右侧定义了两个JPanel,然后在listner中为它们进行切换。
在这里查看示例: https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html