2014-12-07 34 views
1

我試圖向JFrame添加一個退出確認檢查,但我希望該對話框未被修飾。我想我需要使用自定義的JDialog和自定義的JOptionPane。在嵌入式JOptionPane上按是/否沒有任何作用

frame.addWindowListener(new java.awt.event.WindowAdapter() { 

     @Override 
     public void windowClosing(java.awt.event.WindowEvent windowEvent) { 
      JDialog dialog = new JDialog(); 
      dialog.setUndecorated(true); 


      JOptionPane pane = new JOptionPane("Are you sure that you want to exit?", 
      JOptionPane.QUESTION_MESSAGE,JOptionPane.YES_NO_OPTION); 


      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); //I don't even know if this line does anything 


      dialog.setContentPane(pane); 
      dialog.pack(); 
      dialog.setLocationRelativeTo(frame); 
      dialog.setVisible(true); 

      System.out.println("Next Line"); //this line does not work. 

     } 
    }); 

對話框完全按照我想要的方式顯示,但單擊「是」或「否」不起作用。對話框不會消失,我無法找到一種方法來檢查哪個按鈕被點擊。 「下一行」從不打印到控制檯。

回答

2

自己嵌入JOptionPane是不夠的。您需要爲「是」和「否」按鈕註冊回調並對其進行適當處理。這可以通過覆蓋setValue()方法來實現

JOptionPane pane = new JOptionPane(
     "Are you sure that you want to exit?", 
     JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION) { 
    @Override 
     public void setValue(Object newValue) { 
     if (newValue == Integer.valueOf(JOptionPane.YES_OPTION)) { 
      System.out.println("yes"); 
     } else if (newValue == Integer.valueOf(JOptionPane.NO_OPTION)) { 
      System.out.println("no"); 

     } 
    } 
}; 
+0

這可以工作。謝謝。我有另一個問題。我沒有寫任何東西到控制檯,而是關閉了對話框。這是更好的方法,還是有內置的方法來關閉它? – WVrock 2014-12-07 05:56:12

+1

據我所知,嵌入式的JOptionPane無法自動關閉其託管框架,它將如何知道? – Adam 2014-12-07 06:03:57

2

閱讀關於How to Make Dialogs的Swing教程中有關使用JOptionPane的工作示例的部分。

如果您確實想要將JOptionPane添加到您自己的JDialog中,請閱讀JOptionPane API以獲取有關如何檢查選定按鈕的基本示例。

相關問題