java - 表中的 JProgressBar 动画

标签 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 毫秒更新一次,因此不必介意。

最佳答案

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

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

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

编辑

已检查:它正在工作,尽管对于许多“同步”动画的不确定单元格可能看起来有点奇怪。请注意:UI 委托(delegate)中的内部动画状态未记录,因此可能存在根本无法工作的 LAF(例如 Substance,公平地说)。

关于java - 表中的 JProgressBar 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9513589/

相关文章:

java - 测量 Java 执行时间

java - 我怎样才能关注 JTable 的整行?

java - 调整表头大小

Java/Swing 应用程序随机卡住

java - 主要的 Clojure NPE

java - 我应该避免在我的 java 函数中返回 null 吗?

KDE 环境(Red Hat Linux)中的Java Swing 应用程序L&F

java - JPanel 格式问题

java - 如何在 Java Swing 中控制 JTextFields 的宽度?

java - 如何排除@AfterClass方法所花费的时间?