java swing关闭窗口没有退出应用程序

时间:2009-02-21 16:30:17

标签: java swing button exit

我有一个小框架,我问用户&密码。单击主窗口中的按钮即可打开此框架。

然后我有两个按钮:确定和取消。

当我点击“取消”按钮时,我需要在不退出应用程序的情况下关闭此框架。

我该怎么做?

8 个答案:

答案 0 :(得分:19)

您可以使用Frame.hide()或Frame.dispose()。 我还建议查看JDialog或JOptionPane

更正:不推荐使用hide()。应改为使用SetVisible(false)

答案 1 :(得分:4)

也许更简洁的方法就是将setDefaultCloseOperation从EXIT_ON_CLOSE更改为DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

答案 2 :(得分:3)

您可以在框架上调用setVisible(false)。

您可能还想在传递HIDE_ON_CLOSE的帧上调用setDefaultCloseOperation(信息在这里:http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29)。如果用户点击JFrame上的“X”关闭它,这将阻止应用程序消失。

答案 3 :(得分:3)

当用户名/密码成功时,在动作侦听器方法中使用this.dispose();。例如:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

如果您使用内部类来处理事件 只需用Super_Class_Name.this.dispose()替换'this.dispose()';

答案 4 :(得分:2)

确保不要:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

答案 5 :(得分:2)

setVisible方法不释放内存资源,只有在要再次使用表单时才能使用它。

dispose 方法释放此Window,其子组件及其所有子组件使用的所有本机屏幕资源。也就是说,这些组件的资源将被销毁,它们使用的任何内存都将返回给操作系统,并且它们将被标记为不可显示。

答案 6 :(得分:1)

在外部课程中创建一个实现JFrame的功能(需要在按下取消按钮时关闭)。
在该函数的实现中写this.setVisible(false); 最后,当您要关闭它时,请在ActionListener实现中调用此函数。

答案 7 :(得分:1)

你可以通过多种方式实现这一目标,但这两种方式最为实用 1.在实施 this.setVisible(false) 内部写 ActionListener
2.在已实施的 this.dispose() 中写下 ActionListener 。 希望这会对你有所帮助。