Java 询问用户是否想通过JOptionPane退出

Java 询问用户是否想通过JOptionPane退出,java,swing,jframe,joptionpane,windowlistener,Java,Swing,Jframe,Joptionpane,Windowlistener,当用户单击JFrame(右上角)的红十字关闭按钮时,我使用此代码确认用户是否要退出 但问题是,如果用户单击“取消”选项,框架将完全关闭,但我希望用户仍然打开框架,不允许框架关闭。如果我犯了错误或其他什么,请指导我?只需执行以下操作: setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 只要这样做: setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 我犯了个大错 Object

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

但问题是,如果用户单击“取消”选项,框架将完全关闭,但我希望用户仍然打开框架,不允许框架关闭。如果我犯了错误或其他什么,请指导我?

只需执行以下操作:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
只要这样做:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
我犯了个大错

   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_选项,我调用的是CANCEL_选项,这是一个真正的错误,因此,else if应改为:

else if (Answer == JOptionPane.NO_OPTION) {
    this.setDefaultCloseOperation(myclassreference.DO_NOTHING_ON_CLOSE);
} 
此后,;宾果游戏!!!我做完了

我犯了个大错

   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_选项,我调用的是CANCEL_选项,这是一个真正的错误,因此,else if应改为:

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

此后,;宾果游戏!!!我做完了

您可以尝试以下方法:

    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);
                }
            });
        }
    }
{
...
yourFrame.setDefaultCloseOperation(close());
...
}

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

作为补充说明,我建议您坚持使用java命名约定。例如,变量名不应以大写字母开头,类名应始终以大写字母开头。。还有更多。看看这里

您可以尝试以下内容:

    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);
                }
            });
        }
    }
{
...
yourFrame.setDefaultCloseOperation(close());
...
}

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

作为补充说明,我建议您坚持使用java命名约定。例如,变量名不应以大写字母开头,类名应始终以大写字母开头。。还有更多。看看这里

试试这样的方法:

    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);
                }
            });
        }
    }
{
...
yourFrame.setDefaultCloseOperation(close());
...
}

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

试着这样做:

    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);
                }
            });
        }
    }
{
...
yourFrame.setDefaultCloseOperation(close());
...
}

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

实际上,我是在调用取消选项而不是无选项+1给你。谢谢你的回复,实际上我是在叫取消选项而不是没有选项+1给你。谢谢你的回答,准备好了@Azad Omer,但这不是一个完整的答案,你知道,阅读我的问题,你会发现真正的Bluderal准备好了@Azad Omer,但这不是一个完整的答案,你知道,阅读我的问题,你会发现真正的bluder,是为了倾听,今天的投票,是为了聆听,今天错误决定的投票结果,请参见@Vishal K的答案和我评论中的代码链接错误决定,请参见@Vishal K的答案和我评论中的代码链接