2012-01-08 83 views
4

我有一個JFrame,這個JFrame有一個JButton
在JFrame上顯示JDialog(「請稍候」)

我想在JButton第一顯示JDialog(顯示"Please wait"),並執行其他代碼然後關閉JDialog

但是當顯示JDialog停止執行JButton上的其他代碼時。

回答

4

開始Thread(例如在SwingWorker)和其開始處的其他處理,請致電modalDialog.setVisible(true)。任務結束時致電setVisible(false)

2

也許jdialog處於模態模式,請嘗試更改jdialog的模態屬性:yordialog.setModal(false)

4

我會建議創建一個簡單的JDialog,然後在代碼運行後處置它。你可以用下面的代碼創建的JDialog:

JDialog dialog = new JDialog(); 
JLabel label = new JLabel("Please wait..."); 
dialog.setLocationRelativeTo(null); 
dialog.setTitle("Please Wait..."); 
dialog.add(label); 
dialog.pack(); 

並實施這樣的:

dialog.setVisible(true); // show the dialog on the screen 

     // Do something here 

dialog.setVisible(false); // set visibility to false when the code has run 
+0

恕我直言,這是最好的答案。爲什麼添加線程的額外複雜性,如果他們不是必需的。 – 2016-10-19 10:58:08

+0

這很簡單,但在某些情況下可能無法工作......'javax.swing'花了一段時間來創建或繪製框架。因此,您的消息可能不會顯示,因爲JVM不會等到擺動完成其工作。該線程可能會轉到'//在此處執行某些操作。 – 2017-06-15 06:50:35

1

它停下來,因爲你所使用的用於執行代碼「主線程」和顯示JDialog。

爲了解決這個問題,你應該考慮像SwingWorker