2012-06-01 57 views
2

我想在線程執行時顯示進度條並阻止與我的應用程序框架的交互。Swing:如何禁止JFrame/JDialog之外的交互?

在另一個線程中,有人建議使用JDialog而不是JFrame和setModal(true)。但是,這樣做時,Dialog會阻止整個應用程序。

這基本上是我的代碼:

MyDialog dlg = new MyDialog(); 
dlg.setModal(true); 
dlg.setVisible(true); 

//do some stuff.... 
//(never executed when setModal(true) 

dlg.setVisible(false); 
+0

確保在實現對話框之前完成所有工作。 – user1329572

回答

3

這是模態對話框的一點,在「框」之外不會發生任何交互。模式彈出窗口也會在等待用戶輸入時暫停線程。如果你想在顯示對話框時做其他的事情,你必須在對話框中自己做,或者開始一個新的線程來照顧它。

希望有幫助!

1

隨着模態對話框嘗試這樣:

   final JDialog dlg = new JDialog(); 
       dlg.setModal(true); 
       dlg.setSize(500, 500); 
       dlg.addWindowListener(new WindowAdapter() { 
        @Override 
        public void windowActivated(WindowEvent e) { //or other method 
         new Thread(new Runnable() { 
          public void run() { 
           try { 
            //execute your long running task 
           } //you should catch exception 
           finally { 
            dlg.setVisible(false); 
            dlg.dispose(); 
           } 
          } 
         }).start(); 
        } 
       }); 
       dlg.setVisible(true); 

我還可以設置玻璃面板上你的JFrame將攔截來自用戶的任何事件。