JoptionPane ShowConfirmDialog

时间:2012-05-23 09:12:04

标签: java swing if-statement conditional joptionpane

我有一个Java程序。当我运行程序时,它会给我一个GUI,我附上。

当我要关闭它时,它会提示确认对话框。如果我按下是按钮,它将使用System.exit()退出程序。

public static void main(String args[])
{
    ButtonTest app = new ButtonTest( );
    app.addWindowListener( 
        new WindowAdapter( )
        {
            public void windowClosing (WindowEvent e)
            {
                String message = " Really Quit ? ";
                String title = "Quit";
                int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                if (reply == JOptionPane.YES_OPTION)
                {
                    System.exit(0);
                }

            }
        }
    );
}

如果我不想退出该计划,我该怎么办? System.continued()

5 个答案:

答案 0 :(得分:3)

在这种情况下你不需要其他

答案 1 :(得分:3)

尝试设置此项,

app.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)

<强> [编辑]

所以,你的代码会变成这样的,

public static void main(String args[]) {
    ButtonTest app = new ButtonTest();
    app.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            int reply = JOptionPane.showConfirmDialog(null,
                    "Really Quit ?", "Quit", JOptionPane.YES_NO_OPTION);
            if (reply == JOptionPane.YES_OPTION)
                System.exit(0);
        }
    });
    app.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
    app.setSize(640, 480);
    app.setVisible(true);
}

<强> [说明]

你可能会想到为什么会这样。与JFrame不同,Frame的窗口关闭按钮的行为是隐藏窗口。因此,无论如何它都会隐藏/关闭窗口。但是当您指定它还必须退出程序时,当用户单击yes时。然后,除了关闭窗口,它还退出程序。当用户点击no时,它无论如何都会关闭窗口。因此,您必须明确告诉DO_NOTHING_ON_CLOSE

<强> [文件]

  

与Frame不同,JFrame有一些关于如何响应的概念   用户尝试关闭窗口。默认行为是简单的   用户关闭窗口时隐藏JFrame。要更改默认值   行为,您调用方法setDefaultCloseOperation(int)。要做   使用时,JFrame的行为与Frame实例相同   setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)。

参考:JFrame docs

答案 2 :(得分:1)

如果您要问我,我将继续YES SELECTION,而不是突然关闭我的申请System.exit(0),我将选择使用{{1}关闭我的申请的优雅方式在frameObject.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)上,我会选择NO SELECTION。以下是一个示例程序供您使用:

frameObject.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)

答案 3 :(得分:0)

如果您希望程序在按NO时继续,请将其余代码放在else块中,或者调用已放置其余代码的函数。

如果您不想在NO按钮上放置任何操作,则删除else块也是一个选项,因为JOptionPane.showConfirmDialog()将会关闭。您可以在if语句后继续使用其余代码。

仅供参考 - 没有System.continue()。该程序几乎可以自行完成。

答案 4 :(得分:0)

您可以添加else块。如果你想再次运行main方法(我假设你这样做)它应该是这样的。如果用户选择no,您应该运行一些方法,无论是主方法main(null)还是其他方法。

public static void main(String args[])
{
ButtonTest app = new ButtonTest( );
app.addWindowListener( 
        new WindowAdapter( )
        {
            public void windowClosing (WindowEvent e)
            {
                String message = " Really Quit ? ";
                String title = "Quit";
                int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                if (reply == JOptionPane.YES_OPTION)
                {
                    System.exit(0);
                } 
                else 
                {
                  //whatever you plan on running instead here, instead of quitting,
                  //main(null) to run the main method, or put another method if you want
                }
            }
        }
    );
}