JDialog не запускает событие закрытия или закрытия при нажатии кнопки - PullRequest
1 голос
/ 29 марта 2020

При нажатии кнопки «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);
        });
    }
}
...