2013-02-28 95 views
2

我有一個包含多個按鈕的對話框。當一個特定的按鈕被點擊時,它的ActionListener創建一個需要幾秒鐘才能完成的過程。在此期間,我想向用戶提供一些反饋。爲了採取簡單的方法,我在對話框「計算...」中有一個標籤,它最初不可見。代碼片段看起來是這樣的label.setVisible(true)在處理完成後纔會執行任何操作

button_OpenHoursReport.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     lbl_Computing.setVisible(true); 
     new runAndRenderReport(); 
     RunAndRenderReport.main(null); 
     lbl_Computing.setVisible(false); 
    } 
}); 

的問題是,直到RunAndRenderReport完成lbl_Computing文本不可見。顯然,這對用戶來說沒有太大的幫助。不知道從哪裏走。這是否與線程有關?如果是這樣,我可以使用一些指導如何開始。

回答

1

一招比使用SwingWorker類更容易在調用調用setVisible(真)後,打電話給你的標籤上paintImmediately。你應該立即看到效果。

lbl_Computing.paintImmediately(0, 0, lbl_Computing.getWidth(), lbl_Computing.getHeight()); 

但是,如果您希望在報告運行時GUI以其他方式進行響應,SwingWorker就是您的選擇。

+0

謝謝。現在我會立即採用paintImmediately方法,因爲我的GUI可以等待幾秒鐘以完成此過程。我將來需要GUI來響應SwingWorker。 – Paul 2013-02-28 19:33:33

+0

簡而言之,確定性滯後也考慮設置'WAIT_CURSOR'。 – trashgod 2013-02-28 21:57:59

5

actionPerformed()在GUI線程(EDT)上執行,因此避免在其上執行密集型操作。請使用SwingWorker

How SwingWorker works

+0

感謝您的建議。現在,我將採取paintImmediately方法。 – Paul 2013-02-28 19:34:39

相關問題