2014-12-02 65 views
1

這裏是下面的代碼片段,在這裏我想通過設置其父爲resultsTablePanel顯示使用JOptionPane.showConfirmDialog()對話框:'JOptionPane.showConfirmDialog()'中的第一個參數是什麼?

public class SearchResultsTablePanel extends JPanel{...} 

public class DefaultSearchListener{ 

    private SearchResultsTablePanel resultsTablePanel = null; 

    public void f(X x) { 
     int response = JOptionPane.showConfirmDialog(
       resultsTablePanel, 
       "hai", 
       "Warning", JOptionPane.YES_NO_OPTION, 
       JOptionPane.QUESTION_MESSAGE); 

     if (response == JOptionPane.NO_OPTION) { 
      // do something 
     } else if (response == JOptionPane.YES_OPTION) { 
      // do something 
     } else if (response == JOptionPane.CLOSED_OPTION) { 
      // do something 
     } 
    } 
} 

我的問題:

有關的Java Swing API JOptionPane.showConfirmDialog(), 我是否需要作爲第一個參數傳遞resultsTablePanel

我是否需要通過JOptionPane.getframeforcomponent(resultsTablePanel)作爲第一個參數?

+0

正如JavaDocs所描述的那樣,你將它的引用傳遞給一個Component,它作爲對話框的父對象 – MadProgrammer 2014-12-02 19:27:51

回答

3

這並不重要。

作爲處理的一部分,JOptionPane在將參數傳遞給底層JDialog(稍微更一般)之前調用getWindowForComponent

至於隱含的問題「無論如何有什麼區別?」,這與模式有關。在這裏,我會敦促你閱讀Oracle's guide to modality

JOptionPane使用默認的模態類型JDialog,這是上述指南中的應用程序模式。這意味着該對話框將阻止應用程序中的所有窗口的輸入,除對話框爲父項的窗口外。因此,如果您打開2個具有相同父級的對話框 - 您遇到了麻煩,但是如果另一個對話框爲父級對話框,則該孩子將擁有控件,並在關閉後將其傳送給其父級。

+0

正如你所談論的模式,我沒有嘗試使用現有的'class XDialog extends JDialog {}' 構造函數調用'超級(所有者,標題,類型);' 這裏'所有者'是'JOptionPane.getFrameForComponent(resultsTablePanel)' 和類型是'Dialog.ModalityType.DOCUMENT_MODAL' – overexchange 2014-12-03 08:59:21

+0

@overxchange呃...這是一個問題或一份聲明? – Ordous 2014-12-03 11:30:59

+0

我的問題是,如果我繼承'XDialog',而不是使用'JOptionPane.showConfirmDialog()',我可以創建Yes/NO按鈕,但不確定,如何根據上述查詢打印msg「Hai」。我怎麼做? – overexchange 2014-12-03 16:32:44

相關問題