You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JOptionPane对话框如何判断点击的是关闭(X)按钮还是OK按钮

实现方案

核心逻辑:原有JOptionPane.showMessageDialog无法区分关闭触发方式,需替换为带返回值的JOptionPane.showConfirmDialog,通过方法返回的状态码判断用户操作类型。

修改后的完整代码

import javax.swing.*;
import java.awt.*;

public class CustomDialogTest {
    public static void main(String[] args) {
        JCheckBox checkBox = new JCheckBox("My checkbox");

        JLabel modeLabel = new JLabel("Select mode:");
        String[] modes = {"A", "B", "C"};
        JComboBox<String> modesComboBox = new JComboBox<>(modes);
        JPanel modePanel = new JPanel(new FlowLayout());
        modePanel.add(modeLabel);
        modePanel.add(modesComboBox);

        JPanel dialogPanel = new JPanel();
        dialogPanel.setLayout(new BoxLayout(dialogPanel, BoxLayout.Y_AXIS));
        dialogPanel.add(checkBox);
        dialogPanel.add(modePanel);

        // 替换原showMessageDialog为showConfirmDialog,设为仅显示OK按钮,匹配原有交互样式
        int result = JOptionPane.showConfirmDialog(null, dialogPanel, "自定义对话框", JOptionPane.OK_OPTION);
        
        // 判断关闭触发方式
        if (result == JOptionPane.OK_OPTION) {
            System.out.println("用户点击OK按钮关闭对话框");
            // 可在此处获取组件状态执行业务逻辑
            boolean checkBoxStatus = checkBox.isSelected();
            String selectedMode = (String) modesComboBox.getSelectedItem();
        } else if (result == JOptionPane.CLOSED_OPTION) {
            System.out.println("用户点击右上角X按钮关闭对话框");
            // 可在此处添加关闭逻辑
        }
    }
}

状态码说明

JOptionPane.showConfirmDialog返回的int值对应不同的操作场景:

  • JOptionPane.OK_OPTION:用户点击对话框自带的OK按钮触发关闭
  • JOptionPane.CLOSED_OPTION:用户点击右上角X按钮、或通过系统关闭操作直接关掉对话框
  • 如果后续扩展多按钮交互,还可以对应JOptionPane.CANCEL_OPTION、JOptionPane.NO_OPTION等返回值

内容的提问来源于stack exchange,提问作者Software Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:04