2014-12-02 98 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

相关问题