При нажатии кнопки «X» в рамке окна JDialog
- происходит закрытие события, и
- приложение закрывается.
При нажатии кнопки «ОК»
- окно исчезает,
- событие закрытия не вызывается, и
- приложение не закрывается.
Почему? И как мне заставить двоих вести себя одинаково; Я бы хотел, чтобы они оба устроили заключительное мероприятие. Я не хочу создавать пользовательские кнопки. Я хочу, чтобы настройки по умолчанию для текущей операционной системы определяли текст и стиль кнопки, чтобы она соответствовала работающей ОС.
Я наблюдал такое поведение в macOS, Windows, в Java 11 и Java 13. Итак, я предполагаю, что это преднамеренно ... но это наверняка сбивает меня с толку. Я думал, что любой setVisible(false)
вызовет событие закрытия.
Вот мой SSCCE:
import javax.swing.*;
import java.awt.event.*;
public class JexitOnClose2 {
public static void main(String args[]) {
SwingUtilities.invokeLater(()-> {
final JOptionPane pane = new JOptionPane(
new JLabel("hello"), JOptionPane.ERROR_MESSAGE);
JDialog dialog = pane.createDialog(null, "title goes here");
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.addWindowListener(
new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("window closed");
}
}
);
dialog.setVisible(true);
});
}
}