【问题标题】:Ask user if wants to quit via JOptionPane询问用户是否想通过 JOptionPane 退出
【发布时间】:2013-05-03 20:42:41
【问题描述】:

当用户点击JFrame的红色十字关闭按钮(右上角)时,我正在使用此代码确认用户是否要退出

 Object[] options = {"Quit, My Computing Fellow", "No, I want to Work more"};

int Answer = JOptionPane.showOptionDialog(null, "What would you like to do? ","Quit:Continue", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
    null, options,options[1]);
    if(Answer == JOptionPane.YES_OPTION){

        System.exit(0); 
    }
    else if (Answer == JOptionPane.CANCEL_OPTION) {
        return;
    } 

但问题是如果用户单击 CANCEL_OPTION 框架关闭,但我希望用户仍然打开框架并且不允许框架关闭。指导我如果我犯了错误或其他什么?

【问题讨论】:

  • 错误决定,请参阅@Vishal K 的回答,以及我评论中链接的代码

标签: java swing jframe joptionpane windowlistener


【解决方案1】:

这样做:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

【讨论】:

  • 实际上我调用的是 CANCEL_OPTION 而不是 NO_OPTION !为你+1。感谢回复
【解决方案2】:

你可以试试这样的:

    import javax.swing.*;
    import java.awt.event.*;
    public class MyFrame extends JFrame
    {
        public MyFrame()
        {
            setTitle("Close Me");
            setSize(200,200);
            setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            addWindowListener(new WindowAdapter()
            {
                    @Override
                    public void windowClosing(WindowEvent evt)
                    {
                        Object[] options = {"Quit, My Computing Fellow", "No, I want to Work more"};

                        int answer = JOptionPane.showOptionDialog(MyFrame.this, "What would you like to do? ","Quit:Continue", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
                                     null, options,options[1]);
                        if(answer == JOptionPane.YES_OPTION)
                        {
                            System.exit(0); 
                        }
                    }
            });
        }
        public static void main(String st[])
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    MyFrame mf = new MyFrame();
                    mf.setVisible(true);
                }
            });
        }
    }

作为旁注,我建议您坚持使用 java 命名约定。例如变量名不应该以大写字母开头,类名应该总是以大写字母开头..等等。看看这里 Code Conventions for the Java Programming Language

【讨论】:

【解决方案3】:

试试这样的:

{
...
yourFrame.setDefaultCloseOperation(close());
...
}

private int close() {
if(yourCondition)
    return JFrame.DO_NOTHING_ON_CLOSE;
else 
    return JFrame.EXIT_ON_CLOSE;
}

【讨论】:

    【解决方案4】:

    我有一个真正的错误

       Object[] options = {"Quit, My Computing Fellow", "No, I want to Work more"};
    
       int Answer = JOptionPane.showOptionDialog(null, "What would you like to do?","Quit:Continue", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
    null, options,options[1]);
    if(Answer == JOptionPane.YES_OPTION){
    
        System.exit(0); 
    }
    else if (Answer == JOptionPane.CANCEL_OPTION) {
        return;
    } 
    

    很明显,我有两个选项,即 YES_NO_OPTION 并且我调用 CANCEL_OPTION 这是一个真正的错误,所以 else-if 应该更改为:

    else if (Answer == JOptionPane.NO_OPTION) {
        this.setDefaultCloseOperation(myclassreference.DO_NOTHING_ON_CLOSE);
    } 
    

    之后;它的宾果游戏!我已经完成了!

    【讨论】:

    • 已经完成@ Azad Omer 但这不是一个完整的答案,你知道阅读我的问题,你会发现真正的错误
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2020-02-15
    • 2016-09-22
    相关资源
    最近更新 更多