Ответ 1
Вы сообщаете компоненту отправить событие. В этом случае вы хотите, чтобы он отправил событие закрытия окна.
private void exit() {
this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
Что означает программный эквивалент нажатия кнопки закрытия (x) в верхнем правом углу JFrame?
Там метод dispose()
, но это не то же самое, поскольку JFrame может быть настроен на выполнение нескольких разных действий при закрытии (не говоря уже о том, есть ли WindowListener)
Вы сообщаете компоненту отправить событие. В этом случае вы хотите, чтобы он отправил событие закрытия окна.
private void exit() {
this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
Когда вы нажмете x на JFrame, система может быть настроена на выполнение различных действий. По умолчанию это окно просто скрыто с setVisible (false). Я полагаю.
Вы можете установить фрейм для выполнения разных действий при закрытии - вы можете установить его, скрыть или вызвать код на основе setDefaultCloseOperation. Вот варианты:
DO_NOTHING_ON_CLOSE: ничего не делайте; требуют, чтобы программа обрабатывала операцию в методе windowClosing зарегистрированного объекта WindowListener.
HIDE_ON_CLOSE: автоматически скрыть кадр после вызова любых зарегистрированных объектов WindowListener.
DISPOSE_ON_CLOSE: автоматически скрывать и удалять кадр после вызова любых зарегистрированных объектов WindowListener.
EXIT_ON_CLOSE: выйдите из приложения, используя метод выхода из системы. Используйте это только в приложениях.
Но я думаю, что то, что вам нужно, установлено: "Видимый" (false).
Вы должны вставить вызов в очередь сообщений AWT, чтобы все время было правильным, иначе оно не отправит правильную последовательность событий, особенно в многопоточной программе.
public void closeWindow()
{
if(awtWindow_ != null) {
EventQueue.invokeLater(new Runnable() {
public void run() {
awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
}
});
}
}