无法清除JFrame

时间:2013-08-18 05:02:57

标签: java swing jframe jpanel removeall

我正在编写一个程序,其中有一个带有登录gui的JPanel的JFrame。成功登录后,将调用一个清除JFrame的方法。我遇到的问题是,不是清除JFrame,而是JPanel中的东西仍然明显存在,它只是被冻结了。

创建登录gui的方法:

public void logingui() {

    JPanel loginpanel = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 2;
    JLabel gamename = new JLabel("InvestGame By Ama291");
    gamename.setFont(new Font("Arial", 1, 22));
    loginpanel.add(gamename, c);
    c.ipady = 20;
    c.gridx = 0;
    c.gridy = 1;
    loginpanel.add(new JPanel(), c);
    c.ipady = 10;
    c.gridwidth = 1;
    c.gridx = 0;
    c.gridy = 2;        
    loginpanel.add(new JLabel("Username: "), c);
    c.gridx = 1;
    final JTextField userfield = new JTextField(10);
    loginpanel.add(userfield, c);
    c.gridx = 0;
    c.gridy = 3;
    loginpanel.add(new JPanel(), c);
    c.gridx = 0;
    c.gridy = 4;
    loginpanel.add(new JLabel("Password: "), c);
    c.gridx = 1;
    final JPasswordField passfield = new JPasswordField(10);
    loginpanel.add(passfield, c);
    c.gridx = 0;
    c.gridy = 5;
    c.ipady = 20;
    loginpanel.add(new JPanel(), c);
    c.ipady = 10;
    c.gridx = 0;
    c.gridy = 6;
    c.gridwidth = 1;
    JButton createacc = new JButton("Create Account");
    loginpanel.add(createacc, c);
    c.gridx = 1;
    JButton login = new JButton("Log In");
    loginpanel.add(login, c);
    add(loginpanel);
}

清除JFrame的方法:

public void gamegui() {

    JPanel gamepanel = new JPanel();
    removeAll();
    invalidate();
    validate();
    repaint();
    add(gamepanel);
}

有没有人知道如何在JFrame中成功删除JPanel而没有窗口内冻结的JPanel中的按钮和内容?这是我遇到的问题。

3 个答案:

答案 0 :(得分:2)

对于登录,最好使用弹出式JDialog。然后当对话框关闭时,您只需在框架上显示面板。

另一种选择是使用Card Layout。您可以根据需要交换面板。

答案 1 :(得分:1)

从JFrame中删除组件时,组件将被删除但视觉上仍然存在。因此,要隐藏它或刷新JFrame,请使用.setVisible(false)方法。

答案 2 :(得分:0)

如果你只是添加

this.setLayout(your layout)

//你的布局=你正在使用的布局。即边界,卡等。

在gamegui()中的代码中的invalidate()和validate()方法之间。

我希望它会起作用。我没试过,但希望它会起作用。