Программное закрытие JFrame - PullRequest
13 голосов
/ 08 октября 2010

Каков программный эквивалент нажатия кнопки закрытия (x) в верхнем правом углу JFrame ?

Есть метод dispose(), но это не одно и то же, поскольку JFrame может быть настроен на выполнение нескольких различных действий при закрытии (не говоря уже о том, что WindowListener задействован)

Ответы [ 3 ]

16 голосов
/ 08 октября 2010

Вы указываете компоненту отправить событие. В этом случае вы хотите, чтобы он отправил событие закрытия окна.

private void exit() {
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
2 голосов
/ 08 октября 2010

Когда вы нажимаете x на JFrame, система может быть настроена на различные действия.По умолчанию окно просто скрыто с помощью setVisible (false), я полагаю.

Вы можете установить фрейм для выполнения различных действий при закрытии - вы можете настроить его удаление, скрытие или вызов кода на основе setDefaultCloseOperation.Вот варианты:

DO_NOTHING_ON_CLOSE: ничего не делать;требуется, чтобы программа обрабатывала операцию в методе windowClosing зарегистрированного объекта WindowListener.

HIDE_ON_CLOSE: автоматически скрывает кадр после вызова любых зарегистрированных объектов WindowListener.

DISPOSE_ON_CLOSE: автоматически скрывает и удаляет кадрпосле вызова любых зарегистрированных объектов WindowListener.

EXIT_ON_CLOSE: Выйдите из приложения, используя метод выхода из системы.Используйте это только в приложениях.

Но я думаю, что вы после того, как setVisible (false).

0 голосов
/ 27 декабря 2012

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

public void closeWindow()
{
    if(awtWindow_ != null) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...