2014-01-21 83 views
0

我有一個非模態對話框,兩個輸入文本字段與JOptionPane一起顯示,並帶有OK和CANCEL按鈕。我顯示如下對話框。JOptionpane + JDialog(非模態)獲取返回值

 JTextField field_1 = new JTextField("Field 1"); 
     JTextField field_2 = new JTextField("Field 2"); 

     Object[] inputField = new Object[] { "Input 1", field_1, 
       "Input_2", field_2 }; 

     JOptionPane optionPane = new JOptionPane(inputField, 
       JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 
     JDialog dialog = optionPane.createDialog(null, "Input Dialog"); 
     dialog.setModal(false); 
     dialog.setVisible(true); 

如何從對話框中獲取返回值?我需要知道是否按下OK或CANCEL按鈕。如何實現這一目標?

+0

您可能想看看[getValue](http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#getValue%28%29)。 –

回答

1

一個辦法是到ComponentListener添加到dialog並監聽其知名度改變,

dialog.addComponentListener(new ComponentListener() { 
    @Override 
    public void componentResized(ComponentEvent e) { } 

    @Override 
    public void componentMoved(ComponentEvent e) { } 

    @Override 
    public void componentShown(ComponentEvent e) { } 

    @Override 
    public void componentHidden(ComponentEvent e) { 
     if ((int) optionPane.getValue() 
       == JOptionPane.YES_OPTION) { 
      // do YES stuff... 
     } else if ((int) optionPane.getValue() 
       == JOptionPane.CANCEL_OPTION) { 
      // do CANCEL stuff... 
     } else { 
      throw new IllegalStateException(
        "Unexpected Option"); 
     } 
    } 
}); 

注意:你應該使用ComponentAdapter代替;我展示了整個界面的插圖。

+0

我試過這個,當與JOptionPane交互時,沒有任何Overriden方法被調用。 –

+1

@MarkCramer我注意到我的答案有一個編譯時錯誤,我已經修復了。但除此之外,我從問題和這個答案中得到了代碼,它似乎按預期工作。你能否提出一個問題來提供一個不適合你的例子? – kuporific

1

Using getValue()會告訴你對話框是如何關閉的。由於它是非模態的,因此在對話框關閉後您需要獲取該信息,可能使用的Thread將等待您的對話框關閉以返回信息。您不會詳細說明需要哪些信息,因此使用另一個Thread可能不是您的最佳解決方案。