2014-03-03 49 views
-1

我正在開發一個應用程序。我想在退出時出現一個消息框,其中包含消息,例如,「感謝您使用Soft Attendance」。然後幾秒鐘後自動消失。

我對這個如下寫代碼:自動消失的對話框

public void windowClosing(WindowEvent e){ 
     int whichOption; 
     whichOption=JOptionPane.showConfirmDialog(f1,"Are you Serious?","Soft Attendence",JOptionPane.YES_NO_OPTION); 
     if(whichOption==JOptionPane.YES_OPTION){ 
      f1.dispose(); 
      JOptionPane.showMessageDialog(null,"Thanks for using Soft Attendence"); 
     } 
    } 

當我退出按鈕點擊確認對話框出現,之後點擊Yes按鈕 應用程序退出並出現另一個消息框。

Now I have two questions in my mind : 

第一個問題是我已經部署應用程序,然後顯示消息框。 父母死後顯示消息框是否正常?

當出現第二個消息框時,我不想單擊「確定」按鈕。我想它應該會自動消失。所以我的第二個問題是如何顯示一段時間後自動消失的消息框?

+1

對於[示例](http://stackoverflow.com/a/12451673/230513)。 – trashgod

回答

1
Is it fine to show message box after its parent is killed? 

我認爲這不會是一個理想的情況。但是你可以打開對話框,如果parentComponent不具有Frame JOptionPane.showConfirmDialog(null,"...");

How to shown message box that disappear automatically after some time? 

自動一次性可以通過一招得到它,你可以創建一個SwingWorker通常在後臺線程中執行GUI交互任務。設置一個計時器,並在一段時間後執行,並明確地關閉對話框。

class AutoDisposer extends SwingWorker<Boolean, Object> { 
    @Override 
    public String doInBackground() { 
     try{ 
      JOptionPane.getRootFrame().dispose(); 
      return Boolean.True; 
     }catch(Exception ex){...} 
     return Boolean.False; 
    } 
} 

...

new Timer(seconds * 1000, autoDisposer).start(); 
+2

JOptionPane.getRootFrame()。dispose();必須包裝到invokeLater,doInBackground()執行工作者線程,從未通知EDT – mKorbel

+0

謝謝....但我以其他方式完成它,通過第一次隱藏應用程序,然後顯示對話框後等待Thread.sleep() ,然後處置應用程序.... –