2010-04-28 45 views
4

我正在使用JOptionPane.showOptionDialog(...)创建选项对话框;关闭由JOptionPane.showOptionDialog()创建的对话框

对于options参数,我传递一个JButton数组,每个数组都有它自己的ActionListener

其中一个按钮负责关闭对话框。我的问题是:我在关闭按钮的事件处理程序中放置什么代码来关闭选项对话框?

可能有所作为的一点:负责显示此对话框的类是单例,因此负责显示对话框的方法是static。因此,调用javax.swing.JInternalFrame.doDefaultCloseAction();不会“从静态上下文”工作。

感谢

回答

14
final JButton btn = new JButton("Close"); 

btn.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
    Window w = SwingUtilities.getWindowAncestor(btn); 

    if (w != null) { 
     w.setVisible(false); 
    } 
    } 
}); 
+0

大概是我见过最脏的方式来关闭的JOptionPane,但由于因为你救了我的屁股 – smac89 2014-11-21 03:59:33

+0

@ Smac89:是的,它是相当恶心。显然,如果你至少继承了JDialog并在子类中设置了ActionListener,至少可以避免对SwingUtilities.getWindowAncestor()的调用。 – Adamski 2014-11-24 14:23:58

4

尝试

JOptionPane.getRootFrame().dispose(); 
+0

不能正常工作.... – 2016-07-25 13:57:19