在嵌入式JOptionPane上按是/否无效

时间:2014-12-07 05:41:16

标签: java swing joptionpane jdialog

我正在尝试向JFrame添加退出确认检查,但我希望对话框不修饰。我想我需要使用自定义JDialog和自定义JOptionPane。

frame.addWindowListener(new java.awt.event.WindowAdapter() {

        @Override
        public void windowClosing(java.awt.event.WindowEvent windowEvent) {
            JDialog dialog = new JDialog();
            dialog.setUndecorated(true);


            JOptionPane pane = new JOptionPane("Are you sure that you want to exit?",
             JOptionPane.QUESTION_MESSAGE,JOptionPane.YES_NO_OPTION);


            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); //I don't even know if this line does anything


            dialog.setContentPane(pane);
            dialog.pack();
            dialog.setLocationRelativeTo(frame);
            dialog.setVisible(true);

            System.out.println("Next Line"); //this line does not work.

        }
    }); 

对话框完全按照我的要求显示,但点击是或否则无效。对话框不会消失,我无法找到检查单击按钮的方法。 "下一行"永远不会打印到控制台。

2 个答案:

答案 0 :(得分:2)

阅读How to Make Dialogs上Swing教程中有关使用JOptionPane的工作示例的部分。

如果你真的想在你自己的JDialog中添加一个JOptionPane,那么请阅读JOptionPane API,了解如何检查选择了哪个按钮的基本示例。

答案 1 :(得分:2)

单独嵌入JOptionPane是不够的。您需要注册“是”和“否”按钮的回调并正确处理它们。这可以通过覆盖setValue()方法

来完成
JOptionPane pane = new JOptionPane(
        "Are you sure that you want to exit?",
        JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION) {
     @Override
        public void setValue(Object newValue) {
         if (newValue == Integer.valueOf(JOptionPane.YES_OPTION)) {
             System.out.println("yes");
         } else if ( newValue == Integer.valueOf(JOptionPane.NO_OPTION)) {
             System.out.println("no");

         }
     }
};