gpt4 book ai didi

java - 重新加载 JTree 时闪烁

转载 作者:行者123 更新时间:2023-12-02 07:44:46 24 4
gpt4 key购买 nike

我正在制作一个经常更新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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com