Java Jbutton链接到另一个JPanel。 removeAll()干扰窗口

时间:2014-03-23 15:32:23

标签: java swing jpanel jbutton removeall

当我执行此代码时,窗口似乎卡住了。我有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;

因此我该如何解决这个问题呢?任何帮助非常感谢。感谢

1 个答案:

答案 0 :(得分:3)

看起来您正在创建kludgy代码,包括不必要地重新创建已经存在的组件的代码,只需使用CardLayout即可轻松修复。这将允许您轻松,干净地交换JPanels,没有麻烦或大惊小怪。

The CardLayout Tutorial