表格中的JProgressBar动画

时间:2012-03-01 09:25:30

标签: java swing jtable jprogressbar

我有以下问题:

我有一个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毫秒更新一次,所以不要介意。

2 个答案:

答案 0 :(得分:5)

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

使用一个实例
public class MyRenderer ....
    JProgressBar determinate;
    JProgressBar indeterminate; 

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

修改

已检查: 正在工作,但在步骤"中,许多不确定的单元格可能看起来有些奇怪。请注意:内部 - 在ui委托中 - 动画状态没有记录,因此可能存在LAF并且它根本不起作用(f.i. Substance,afair)。

答案 1 :(得分:3)

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