java swing закрывает окно без выхода из приложения

StackOverflow https://stackoverflow.com/questions/573317

  •  05-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

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

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

Использование 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();

Убедитесь, что вы этого не делаете:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

В утилизировать метод освобождает все собственные ресурсы экрана, используемые этим окном, его подкомпонентами и всеми принадлежащими ему дочерними элементами.То есть ресурсы для этих Компонентов будут уничтожены, вся потребляемая ими память будет возвращена операционной системе, и они будут помечены как недоступные для воспроизведения.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top