2012-05-02 48 views
3

我需要一個非常簡單的(骨架)關於用Java開發GUI的進度條教程。進度條可以是「不確定的」,理想情況下具有可更新的文本標籤。Swing中的Java任務進度條

這裏是一些骨架代碼,我希望有人可以擴展到足以使某些工作。

class MyFunView extends FrameView { 

    // class vars and other stuff... 

    @Action 
    public void excitingButtonPressed() { 

    /* I have n files to download */ 
    // Download file 1, set progress bar status to "downloading file 1" 
    // ... 
    // Download file n, set progress bar status to "downloading file 2" 

    } 

} 

基本上,我如何以及如何將我的下載代碼包裹在內? (據我所知,有一些任務所需的子類?)

非常感謝。

編輯:

我們都只有這麼多寶貴的時間來活着,沒有辦法可以在短短的代碼或因爲我本來希望的時間內完成,所以我不會用一個進度條。

+1

*「我需要一個非常簡單的(骨架)教程進度條」*你在這裏:[如何使用進度條](http:///docs.oracle.com/javase/tutorial/uiswing/components/progress.html)。 *「這是一些我希望有人可以擴展的骨架代碼」*您的預算是多少? –

+1

順便說一下''正在下載文件..'看['ProgressMonitorInputStream'](http://docs.oracle.com/javase/7/docs/api/javax/swing/ProgressMonitorInputStream.html)。它是爲了它而做的,並且應該指出真正的進步。 –

+0

@B。 VB。在編輯中寫道[我們都只有這麼多寶貴的時間才能活着,沒有辦法可以像我希望的那麼少的代碼或時間完成,所以我不會使用進度條。](http:// www.java2s.com/Code/Java/Swing-JFC/CatalogSwing-JFC.htm),因爲我覺得你忘了點擊.... – mKorbel

回答

3

您可以結合使用SwingWorkerJProgressBar

另一種選擇是執行您的任務(例如Runnable)並定期更新JProgressBar。但要小心,Swing中的任何UI操作都必須在EDT上完成。 SwingWorker有一個好的財產照顧這個細節。你自己的解決方案將不得不使用SwingUtilities.invokeLater,。例如:

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     progressBar.setValue(progressCounter++); 
    } 
}); 

很多愚蠢的東西的代碼,不是嗎?也許SwingWorkerPropertyChangeListener是一個更好的解決方案,最後...

+0

打我吧lol – rflood89

+0

「_Lot代碼爲一個愚蠢的東西,是不是?」 - 是的,所以擰進度欄..不值得,對不起用戶。 –

+0

嗯,它仍然可以在'PrepertyChangeListener'中 - 但是使用了不同類型的樣板(監聽器本身,沒有'invokeLater')。 – Anonymous