2010-04-28 87 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