Swing中的Java任务进度条

3
我需要一个非常简单的(骨架式)Java GUI进度条教程。进度条可以是“不确定性”的,并且最好有一个可更新的文本标签。
以下是一些骨架代码,希望有人能够扩展它,使其能够工作。
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"

  }

} 

基本上,我该如何包装我的下载代码?(我了解需要某种Task的子类?)

非常感谢。

编辑:

我们每个人的宝贵时间都很有限,没有任何方法可以在像我希望的那样少的代码或时间内完成,因此我将不使用进度条。


1
“我需要一个非常简单(骨架式)的进度条教程。” 这里有一个:如何使用进度条。“这是一些骨架代码,希望有人能够扩展它。” 你的预算是多少? - Andrew Thompson
1
顺便提一下 - downloading file.. 为此,请查看 ProgressMonitorInputStream。它是专门为此而设计的,应该能够给出实际进度的指示。 - Andrew Thompson
2个回答

6

1
你是如何在那么短的时间内想出那么棒的列表的?! - Andrew Thompson
不需要感谢。我的奖励来自于看到你的答案。 :) - Andrew Thompson

3
您可以使用SwingWorkerJProgressBar一起使用。
另一种选择是执行您的任务(例如Runnable)并定期更新JProgressBar。但请注意,在Swing中,任何UI操作都必须在EDT上完成。 SwingWorker有一个很好的特性,可以处理这个细节。您自己的解决方案将需要使用SwingUtilities.invokeLater,例如:
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        progressBar.setValue(progressCounter++);
    }
});

为了一个愚蠢的东西写了很多代码,是吗?也许最终使用带有PropertyChangeListenerSwingWorker是更好的解决方案...


"为了一件愚蠢的事情写了很多代码,是吧?没错,那就算了进度条吧...不值得,对不起用户。" - Bill
好的,它仍然可以在PrepertyChangeListener中 - 但是使用不同类型的样板文件(监听器本身,没有invokeLater)。 - Anonymous
@匿名 我认为OP需要解释一下这个或者这个,为什么只有我的赞数。 - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接