2012-11-28 112 views
2

所以這是我第一次使用JOptionPane,我想知道是否有人可以幫助解釋我怎樣才能讓我的兩個按鈕都能執行某些操作?對於所有的意圖和目的,它只是打印出「你好」。這是我的代碼。到目前爲止,如果點擊「Uhh ....」按鈕,它只會打印出「Hi」,但當我點擊「w00t !!」時,我希望它也能做到這一點。按鈕也是如此。我知道它與參數「JOptionPane.YES_NO_OPTION」有關,但我不確定我到底需要做什麼。我在這裏先向您的幫助表示感謝!Java Swing JOptionPane按鈕選項

Object[] options = {"Uhh....", "w00t!!"}; 
int selection = winnerPopup.showOptionDialog(null, 
    "You got within 8 steps of the goal! You win!!", 
    "Congratulations!", JOptionPane.YES_NO_OPTION, 
    JOptionPane.INFORMATION_MESSAGE, null, 
    options, options[0]); 
    if(selection == JOptionPane.YES_NO_OPTION) 
    { 
     System.out.println("Hi"); 
    } 

回答

4

javadocs

當的showXxxDialog方法之一返回一個整數,該 可能的值是:

YES_OPTION 
NO_OPTION 
CANCEL_OPTION 
OK_OPTION 
CLOSED_OPTION 

所以,你的代碼應該是這個樣子,

if(selection == JOptionPane.YES_OPTION){ 
    System.out.println("Hi"); 
} 
else if(selection == JOptionPane.NO_OPTION){ 
    System.out.println("wOOt!!"); 
} 

但無論如何,這個邏輯有點奇怪,所以我可能會推出我自己的對話框。

+0

是的,我在讀從文檔,但showXxxDialog方法中只有一個參數處理所有OPTION? – Mike

+0

@Mike,完全是一個單獨的問題。 – user1329572

+1

@Mike,有關更多信息,請參閱[如何製作對話框](http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html)。 – user1329572

-3
int selection = 0; 
JOptionPane.showOptionDialog(null, 
      "You got within 8 steps of the goal! You win!!", 
      "Congratulations!", JOptionPane.YES_NO_OPTION, 
      JOptionPane.INFORMATION_MESSAGE, null, 
      options, options[0]); 

if(selection == JOptionPane.YES_NO_OPTION) 
{ 
    System.out.println("Hi"); 
} 
+0

我不認爲你在提交這個答案前已經理解了這個問題.. – user1329572

0

在JOPtionPane類中有一些常量表示按鈕的值。

/** Return value from class method if YES is chosen. */ 
    public static final int   YES_OPTION = 0; 
    /** Return value from class method if NO is chosen. */ 
    public static final int   NO_OPTION = 1; 
    /** Return value from class method if CANCEL is chosen. */ 
    public static final int   CANCEL_OPTION = 2; 

您更改了按鈕的名稱,因此,第一個按鈕「Uhh」的值爲0,其按鈕「w00t!」假定1

這樣一個值,你可以使用這個:

if(selection == JOptionPane.YES_OPTION) 
{ 
    System.out.println("Hi"); 
} 
else if(selection == JOptionPane.NO_OPTION){ 
    // do stuff 
} 

也許可以更好地使用swicht /箱功能:

switch (selection) 
    { 
     case 0: 
     { 

      break; 
     } 
     case 1: 
     { 

      break; 
     } 
     default: 
     { 
      break; 
     } 
    } 
+0

在switch語句中,爲什麼不在'case'語句中使用'JOptionPane'常量? – user1329572

+0

如何改變按鈕的名稱,正確的將在自己的類中創建新的常量,從而創建新的值。所以可以在交換機上使用它們。像: private static final int Uhh = 0; private static final int wOOt = 1; – matheuslf

+0

我完全不同意。爲什麼重複信息? – user1329572