表格中的JProgressBar动画

Not*_*erd 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

kle*_*tra 5

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

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

    public Component getTableCellRendererComponent(...) {
         if (value.isDeterminate) {
           ...
           return determinate;
         }
         ....
         return undeterminate
    } 
Run Code Online (Sandbox Code Playgroud)

编辑

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