8

我有一个小框架,我在其中询问用户和密码。单击主窗口中的按钮将打开此框架。

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

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

我怎样才能做到这一点?

4

8 回答 8

20

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

更正: hide() 已弃用。应该使用 SetVisible(false)

于 2009-02-21T16:31:26.453 回答
4

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

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
于 2011-09-07T07:13:52.097 回答
3

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

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

于 2009-02-21T16:31:29.807 回答
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);
        }
    }

}

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

于 2011-10-19T14:10:46.347 回答
2

确保您没有:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
于 2009-02-21T16:35:27.363 回答
2

setVisible 方法不会释放内存资源,仅应在再次使用表单时使用。

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

于 2013-01-10T12:13:46.360 回答
1

在要实现的外部类中创建一个函数JFrame(您需要在按下取消按钮时关闭)。
编写this.setVisible(false);该函数的实现。最后,当你想关闭它时
,在实现中调用这个函数。ActionListener

于 2011-08-17T04:48:53.607 回答
1

您可以通过多种方式做到这一点,但这两种方式是最有用的一种
1. 写入this.setVisible(false)内部实现 或 2. 写入内部实现。希望这会帮助你。ActionListener

this.dispose()ActionListener

于 2012-08-21T16:55:54.453 回答