Java JProgressBar表中的动画

Java JProgressBar表中的动画,java,swing,jtable,jprogressbar,Java,Swing,Jtable,Jprogressbar,我有以下问题: 我有一个JTable,它向我显示命令的进度。我有两种命令。确定的和不确定的命令 如果表中只有未确定的进度条,则进度显示正确。 但是如果我有一个确定的进度条,另一个不确定的进度条就不会被激活 这是我的密码: class ProgressBarRenderer implements TableCellRenderer { /** The bar. */ private JProgressBar bar = new JProgressBar() { p

我有以下问题:

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

可能您有问题,基本上有两种方法

  • 使用

  • 使用


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

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

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


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

为什么有两个
返回条
语句?只要确保他在将条设置为indetermoinate模式+1后返回,这将是重新分解的良好开端。原始版本太复杂、不对称和冗余,无法通过检查进行调试,至少对我来说是这样。谢谢你完美地完成了它。。。我从没想过。。。非常感谢你再次。不可能取消删除这篇文章,我多么讨厌梅塔苏,否则我坚持我关于取消删除的请求there@mKorbel不知道为什么会被删除。。。唯一的选择确实是去meta,那里总是很有趣;-)@克利奥帕特拉:-)eeeee