2012-05-02 73 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