首页 > 解决方案 > 按下按钮时,JDialog 不会触发关闭或关闭事件

问题描述

单击 JDialog 的窗口框架上的“X”按钮时

单击“确定”按钮时

为什么?以及如何让两者表现相同;我希望他们俩都举行闭幕式。我不想创建自定义按钮。我希望当前操作系统的默认外观和感觉来指示按钮文本和样式,以便与正在运行的操作系统保持一致。

我在 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);
        });
    }
}

标签: javaswing

解决方案


推荐阅读