【发布时间】:2014-11-25 08:32:09
【问题描述】:
我遇到了一个问题,即我有一个 JFrame,其中添加了 2 个 JPanel,如图所示: 在上图中,一个 JPanel 有一些 JButton,第二个 JPanel 有一些表单字段,当我点击第一个 JPanel 中的 JButton 时,我想更改/(删除旧的并添加新的 JPanel),如下所示:
我有代码 sn-p :
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。
【问题讨论】:
-
为什么会有invalidate();,用CardLayout代替
-
同意@mKorbel。使用
CardLayout,如this answer 所示。 -
1) 另见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? (Yes.) 2) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是CONSTANT)并始终如一地使用它。 -
卡片布局,卡片布局,卡片布局