2

我有以下问题:

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

4

2 回答 2

5

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

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

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

编辑

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

于 2012-03-01T11:23:20.760 回答
3

probably you have an issue with Concurency in Swing, basically there are two ways

于 2012-03-01T09:36:46.397 回答