java - 重新加载 JTree 时闪烁

标签 java swing rendering jtree double-buffering

我正在制作一个经常更新JTree的模拟器。树中的节点都是JProgressBars

我正在调用 tree.treeModel.insertNodeInto(,,)treeModel.reload() 来更新树。问题是它会立即更新自身,而无需等待 repaint() 调用。这会导致树闪烁。我尝试为节点、树及其所在容器设置 setDoubleBuffered(true) ,但没有任何变化。

这是我的代码:(File 类扩展了 DefaultMutableTreeNode)

public class FileTree extends JTree {

    DefaultTreeModel myTreeModel;

    FileTree(File root) {
        super(root);
        myTreeModel = (DefaultTreeModel) this.getModel();
        this.treeModel = myTreeModel;
        this.setCellRenderer(new ProgressBarCellRenderer());
        this.setEditable(true);
    }

    public void update(File file, File parent) {
        myTreeModel.insertNodeInto(file, parent, parent.getChildCount());
        myTreeModel.reload();
    }

    class ProgressBarCellRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            File file = (File) value;
            JProgressBar progressBar;
            progressBar = new JProgressBar(0, file.length);
            progressBar.setValue(file.completed);
            progressBar.setPreferredSize(new Dimension((int)(Math.log(file.size)*50),10));
            return progressBar;
        }
    }

}

最佳答案

我怀疑mixing heavy and light components导致闪烁。效果可以看这个example通过单击圆圈或调整封闭框架的大小。为了获得更好的指导,请编辑您的问题以包含 sscce显示您所描述的问题。

关于java - 重新加载 JTree 时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059448/

相关文章:

java - Hadoop:使用不同的Mappers处理不同的文件,并使用Custom Writable在Reducer中合并结果

java - 常用的 Java 库放置在哪里最好? (最佳实践 ?)

java - java 代码中检测多个 USB 网络摄像头

java - 无法使用 ImageIcon 将图像添加到 jTable 单元格

c++ - OpenGL 批处理渲染器中的纹理出血/损坏

c++ - OpenGL 试图渲染一个立方体,但平面之间有奇怪的线条

java - 如何扩展@Service?

java - 给组件添加JComponents可能会出现什么问题

javascript - 渲染对象实例中的颜色不正确,我完全不知道整个该死的世界为什么

java - 客户端加密