当我执行此代码时,窗口似乎卡住了。我有2种方法。包含按钮的viewOne方法。按下此按钮后,我想转到viewAll方法。他们都有不同的JPanes。我知道链接的工作原理是放入打印行。然而
canvas.removeAll();
似乎堵住了窗户。没有按钮可以按下,没有任何反应。但是,如果没有这一行,则两个Jpanes(viewOne和viewAll)并排出现。我想关闭viewOne JPane并在按下按钮时打开viewAll JPane。请参阅下面的代码。 (请注意,缩进在代码中是正确的,在此处复制时已移动。)
public class Contacts extends JFrame
{
public static Contacts cont;
public static JFrame canvas;
public static void main(String[] args)
{
cont = new Contacts();
canvas = new JFrame("Contacts");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.show();
canvas.getContentPane().add(cont.viewOne());
canvas.pack();
}
private JPanel viewOne()
{
JPanel viewOnePanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
viewOnePanel.setPreferredSize(new Dimension(500,500));
viewOnePanel.setBackground(Color.white);
c.fill = GridBagConstraints.HORIZONTAL;
//button for back
JButton back = new JButton("BACK");
back.setForeground(Color.black);
c.gridx = 0;
c.gridy = 1;
viewOnePanel.add(back, c);
back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
canvas.getContentPane().add(cont.viewAll());
}});
return viewOnePanel;
}
private JPanel viewAll()
{
canvas.removeAll()
JPanel viewAllPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
viewAllPanel.setPreferredSize(new Dimension(500,500));
viewAllPanel.setBackground(Color.white);
c.fill = GridBagConstraints.HORIZONTAL;
因此我该如何解决这个问题呢?任何帮助非常感谢。感谢
答案 0 :(得分:3)
看起来您正在创建kludgy代码,包括不必要地重新创建已经存在的组件的代码,只需使用CardLayout即可轻松修复。这将允许您轻松,干净地交换JPanels,没有麻烦或大惊小怪。