JTree
頻繁に更新しながらシミュレーターを作っています。ツリーのノードはすべてJProgressBars
.
私はツリーを更新するために呼び出しtree.treeModel.insertNodeInto(,,)
ています。問題は、呼び出しtreeModel.reload()
を待たずに即座に更新されることです。repaint()
これにより、ツリーが点滅します。setDoubleBuffered(true)
ノード、ツリー、およびそれが含まれるコンテナーの設定を試みましたが、何も変わりません。
これが私のコードです:(クラスFile extends 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;
}
}
}