2013-05-03 32 views
0

退出我使用這個代碼,以確認是否要退出或沒有時,他點擊的JFrame紅十字會關閉按鈕(右上角)用戶詢問用戶是否想通過JOptionPane的

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,但我希望用戶仍然打開幀並且不允許幀關閉。指導我如果我在做錯誤或其他什麼?

+0

錯誤的決定,看答案由@Vishal K,和代碼鏈接在我的評論 – mKorbel 2013-05-03 22:22:32

回答

0

我有一個真正的大錯

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 (Answer == JOptionPane.NO_OPTION) { 
    this.setDefaultCloseOperation(myclassreference.DO_NOTHING_ON_CLOSE); 
} 

此後;它的賓果!我已經搞定了!

+0

並且@Dima Goltsman的回答已被接受。 – Azad 2013-05-03 20:56:56

+1

已經完成@ Azad Omer但這不是一個完整的答案你知道閱讀我的問題,你會發現真正的藍調 – 2013-05-03 21:00:43

2

只是這樣做:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
+0

其實我打電話的CANCEL_OPTION代替NO_OPTION!爲你+1。感謝您的回覆 – 2013-05-03 20:55:41

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

+0

[WindowListener不需要更改setDefaultCloseOperation](http://stackoverflow.com/a/9228595/714968),是在那裏聆聽,今天得票 – mKorbel 2013-05-03 22:21:08

0

嘗試這樣的事:

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

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