【问题标题】:Why is SwingWorker#setProgress limited to [0, 100]? [closed]为什么 SwingWorker#setProgress 限制为 [0, 100]? [关闭]
【发布时间】:2012-02-14 12:56:42
【问题描述】:

SwingWorker#setProgress 如果参数不是从 0 到 100,则抛出 IllegalArgumentException。我认为 setProgress 方法的主要目的是更新 JProgressBar(就像在 this tutorial 中一样)。如果是这样,为什么JProgressBar的进度不受限制,为什么要限制SwingWorker的进度为[0, 100]?

【问题讨论】:

  • @MДΓΓБДLL 这就是我的想法,但我想看看是否有真正的原因。

标签: java swing progress swingworker


【解决方案1】:

他们将进度限制在 [0,100] 是否有充分的理由?

就这个问题有建设性的答案而言,什么构成了进步的概念可能最了解后台线程中正在建模的任何内容。缩放限制了必须暴露的细节量。

同时,SwingWorker打算被子分类。没有什么可以排除添加 setProgress(int progress, in min, int max) 方法和随之而来的属性更改支持,但很难看出任何优势 - 接收者只需将其缩放以进行显示。

【讨论】:

  • aaaach,该睡觉了 +1
  • setProgress 不是用于覆盖的方法(微不足道,因为它是最终的:-),也不是绕过属性“progress”的合同
【解决方案2】:

讨论 api 设计很有趣,但容易猜测:-)

周末的一些随机想法:

  • SwingWorker 的基本流程模型是允许在后台执行某些操作并支持将中间结果和最终结果报告回 EDT。

  • 它的目的是为了子类化(正如@trashgod 已经强调的那样),同时它试图最大限度地减少这样做所需的工作量:状态和进度是完全定义和实现的便利属性,意味着按原样使用。

  • 既然如此,api doc 规则 - 它清楚地说明了绑定属性进程的有效值在 0 ... 100 的范围内,incusively。没有歧义,在自定义实现中不允许更改任何内容。以百分比显示进度是最常见的用例,开箱即用地支持这一点是合理的做法。

  • 为了报告与百分比不同的坐标中的中间结果,预期的路径是实现流程(..)。这取决于自定义实现它到底做了什么,可能是触发自定义属性或直接填充视图模型或......任何

  • 最后,教程示例就是这样,一个示例。另外,它本身是不一致的:描述中提到了一个未在自定义 swingworker 中实现的方法 task.getLenghtOfTask。我的(疯狂的)猜测是,示例文本仍然基于可能支持任意值的旧版本。

要回答这个问题(我的 0.02 欧分 :-) - 设计中没有什么不好,它是一个平衡良好的基础实现,可以处理开箱即用的常见用例,同时足够灵活,可以制作更多高级需求易于实现。

一旦有一条信息可用就更新

你不能完全控制报告的粒度:你所能做的就是定义最小块的单位,然后必须期望收到一个或几个最小的硬币。

【讨论】:

    【解决方案3】:

    这取决于您的用例,但您也可以使用 publish 方法发布进度并在 publish 方法中更新进度条。示例见my answer on another SO question

    【讨论】:

    • 我考虑过使用它,但它不适用于我的用例。我正在使用SwingWorker 来获取JTable 的信息,具体取决于在该表上选择了哪些行索引。对于选择的每个索引,SwingWorker 获取该行的必要信息(1x 的信息片段)并使用publishprocess 在整行更新一次JTable 的模型的信息可用。但是,我希望 JProgressBar 在有一条信息可用时更新(而不是在整行可用时)。
    【解决方案4】:

    1) SwingWorker#setProgress ---> 我把它作为百分比量,基本上介于 0 和 100 之间,同意代数知道负 % 或 1M at %,但同样可以计算第四维/第五维, Drake equation 可能会更难一点,但可能

    2) JProgressBar ---> 没有这个限制/限制,因为你可以编写很好的代码,在哪里可以切换(JComboBox)在 %,Mb 中的值,保持 .... 进度

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 2021-11-18
    • 2021-09-25
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多