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
相关产品推荐
相关产品推荐

