Программное закрытие JFrame

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

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

Ответы

Ответ 1

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

private void exit() {
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}

Ответ 2

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

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

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

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

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

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

Но я думаю, что то, что вам нужно, установлено: "Видимый" (false).

Ответ 3

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

public void closeWindow()
{
    if(awtWindow_ != null) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
            }
        });
    }
}