嵌入式的JOptionPane按是/否有没有影响(Pressing Yes/No on embedd

2019-10-21 09:31发布

我想添加一个退出确认支票的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.

        }
    }); 

出现的对话框正是我想要的,但点击yes或no什么都不做。 对话框不消失,我无法找到一个方法来检查被点击了哪个按钮。 “下一行”从不打印到控制台。

Answer 1:

自身嵌入的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");

         }
     }
};


Answer 2:

阅读从秋千教程的部分是怎样炼成的对话框用于工作使用的JOptionPane的实例。

如果你真的想一个JOptionPane中添加到您自己的JDialog,然后读取JOptionPane API为如何检查选中了哪个按钮,一个基本的例子。



文章来源: Pressing Yes/No on embedded JOptionPane has no effect