【问题标题】:JProgressBar Animation in a Table表格中的 JProgressBar 动画
【发布时间】:2012-03-19 19:01:52
【问题描述】:

我有以下问题:

我有一个显示命令进度的 JTable。我有两种命令。确定和不确定的命令。

如果我在表中只有不确定的进度条,则进度显示正确。 但如果我有一个确定的进度条,另一个不确定的将不会被动画。

这是我的代码:

class ProgressBarRenderer implements TableCellRenderer {

    /** The bar. */
    private JProgressBar bar = new JProgressBar() {
        public boolean isDisplayable() {
            return true;
        };
    };

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        ProgressBarInfo pbi = (ProgressBarInfo) value;
        if (pbi.getType() == Progress.LS) {
            if (pbi.getValue() == -1) {
                bar.setIndeterminate(false);
                bar.setValue(0);
                bar.setString("Progress ended");
            } else {
                bar.setIndeterminate(true);
                bar.setString(pbi.getValue() + " " + pbi.getText());
            }
            bar.setStringPainted(true);

            return bar;
        } else if (pbi.getType() == Progress.SCP) {
            if (pbi.getValue() == -1) {
                bar.setIndeterminate(false);
                bar.setValue(0);
                bar.setString("Progress ended");
            } else {
                bar.setValue(pbi.getValue());
                bar.setString(pbi.getValue() + "% " + pbi.getText());
            }
            bar.setIndeterminate(false);
            bar.setStringPainted(true);
        }
        return bar;
    }
}

表格由 swingworker 线程每 10 毫秒更新一次,所以不要介意。

【问题讨论】:

  • 为什么有两个return bar 语句?
  • 只是为了确保他在将栏设置为不确定模式后返回

标签: java swing jtable jprogressbar


【解决方案1】:

progressBar 的内部状态(确定与不确定)非常不同 - 在同一实例上进行切换 可能是原因。尝试为每个实例使用一个实例

public class MyRenderer ....
    JProgressBar determinate;
    JProgressBar indeterminate; 

    public Component getTableCellRendererComponent(...) {
         if (value.isDeterminate) {
           ...
           return determinate;
         }
         ....
         return undeterminate
    } 

编辑

已检查:它正在工作,但对于许多“同步”动画的不确定单元格可能看起来有点奇怪。请注意:内部 - 在 ui 委托中 - 动画状态未记录,因此可能存在根本不起作用的 LAF(f.i. Substance,公平)。

【讨论】:

  • +1 这将是重构的良好开端。原件过于复杂、不对称和冗余,无法通过检查进行调试,至少对我来说是这样。
  • 谢谢你做得很完美......从来没有想过......太好了,再次感谢你。
  • please are you know about ???,无法取消删除此帖子,我多么讨厌meta_SO,否则我坚持我的取消删除请求
  • @mKorbel 不知道为什么要删除它......唯一的选择确实是去元,那里总是很有趣;-)
  • @kleopatra :-) eeeee lets this decision for fun_factory
【解决方案2】:

可能你对Concurency in Swing有问题,基本上有两种方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2023-03-26
    • 2019-01-04
    相关资源
    最近更新 更多