JFrame默认关闭操作中可能有故障

时间:2018-10-06 14:30:39

标签: java swing

我遇到JFrame的DefaultCloseOperation问题。我正在使用Netbeans。我已经在JFrame的属性窗口中将关闭操作设置为自定义代码。 每当我运行此JFrame时,自定义代码都会自动执行。即使我不关闭框架,自定义代码也基本上是一个函数:

public static int logout(){

   int userconfirm=  JOptionPane.showConfirmDialog(null,"Are you sure you want 
             to Exit?","Please Confirm",YES_NO_OPTION);
   if(userconfirm==0){
       return 1;
   }
   else 
      return 0;
   }

我不知道关闭框架必须返回什么int值,我只是在做实验,所以我返回零或一。

1 个答案:

答案 0 :(得分:0)

if(userconfirm==0){

首先,不要使用幻数。人们不知道“ 0”是什么意思。 API提供了JOptionPane.YES_OPTION之类的变量供您使用。使用API​​提供的变量使代码更具可读性。

  

每当我运行此JFrame时,自定义代码都会自动执行。即使我不关闭框架,

您应该使用WindowListener监视窗口的关闭。基本逻辑如下:

JFrame frame = new JFrame(...);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frame.addWindowListener( new WindowAdapter()
{
    public void windowClosing(WindowEvent e)
    {
        JFrame frame = (JFrame)e.getSource();

        int result = JOptionPane.showConfirmDialog(
            frame,
            "Are you sure you want to exit the application?",
            "Exit Application",
            JOptionPane.YES_NO_OPTION);

        if (result == JOptionPane.YES_OPTION)
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
});

frame.setVisible( true );

注意:由于关闭逻辑全部在侦听器内部处理,因此不需要方法。

有关更多信息和编码思路,请参见Closing an Application