Java свинг закрыть окно без выхода из приложения - PullRequest
8 голосов
/ 21 февраля 2009

У меня есть маленькая рамка, где я спрашиваю пользователя и пароль. Этот кадр будет открыт при нажатии на кнопку в главном окне.

Тогда у меня есть две кнопки: ОК и Отмена.

Когда я нажимаю кнопку «Отмена», мне нужно закрыть этот кадр, не выходя из приложения.

Как я могу это сделать?

Ответы [ 8 ]

19 голосов
/ 21 февраля 2009

Вы можете использовать либо Frame.hide (), либо Frame.dispose (). Я также рекомендовал бы изучить JDialog или JOptionPane

Исправление: hide () устарела. Вместо этого следует использовать SetVisible (false)

4 голосов
/ 07 сентября 2011

Возможно, более чистый способ - просто изменить setDefaultCloseOperation с EXIT_ON_CLOSE на DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
3 голосов
/ 19 октября 2011

Используйте 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 ();

3 голосов
/ 21 февраля 2009

Вы можете вызвать setVisible (false) для фрейма.

Возможно, вы также захотите вызвать setDefaultCloseOperation для фрейма, передаваемого в HIDE_ON_CLOSE (информация здесь: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29).). Это предотвратит уход приложения, если пользователь нажмет "X" на JFrame, чтобы закрыть его. 1005 *

2 голосов
/ 10 января 2013

Метод setVisible не освобождает ресурсы памяти и должен использоваться только при повторном использовании формы.

Метод dispose Освобождает все ресурсы собственного экрана, используемые этим окном, его подкомпоненты и все принадлежащие ему дочерние элементы. То есть ресурсы для этих Компонентов будут уничтожены, любая память, которую они потребляют, будет возвращена ОС, и они будут помечены как неотображаемые.

2 голосов
/ 21 февраля 2009

Убедитесь, что вы не:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
1 голос
/ 21 августа 2012

Вы можете сделать это разными способами, но эти два способа наиболее пригодны для использования
1. напишите this.setVisible(false) во внутрь реализовано ActionListener
Или
2. напишите this.dispose() внутри реализовано ActionListener. Надеюсь, это поможет вам.

1 голос
/ 17 августа 2011

Создайте функцию во внешнем классе, где вы реализуете JFrame (необходимо закрыть при нажатии кнопки отмены).
Напишите this.setVisible(false); в реализации этой функции.
Наконец, вызовите эту функцию в реализации ActionListener, если вы хотите закрыть ее.

...