JTree的某些节点的标签表示计数器,其在计数后增加长度。这导致缩写(...)。想象一下,你有一棵树,每个节点都可以在任何时间点改变它的标签大小。
树在一个单独的线程中每100毫秒重新绘制一次(tree.repaint()),以跟踪更改的图标和更改标记,这些标记是跟踪事件和时间进度的结果。我尝试了一种方法,我用每个树节点上的nodeChanged()调用替换了repaint()方法。树开始闪烁。
我需要做什么才能根据新的长度更新这些节点标签? 我已经在扩展DefaultTreeCellRenderer了。
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
DefaultMutableTreeNode node;
Object nodeValue;
TestComponent currentComponent;
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
node = (DefaultMutableTreeNode) value;
nodeValue = node.getUserObject();
if(nodeValue instanceof TestComponent) {
currentComponent = (TestComponent) nodeValue;
setText(currentComponent.getLabel());
}
return this;
}
我应该在CellRenderer中做些什么来“修复”“setText”的问题?
答案 0 :(得分:3)
树在单独的线程中每100毫秒重新绘制一次(tree.repaint()),以跟踪更改的图标和更改标记,这些标记是跟踪事件和时间进度的结果
错误,TreeModel
应根据跟踪的事件触发事件,JTree
会自动更新。这些更改当然应该在EDT上进行,而不是在单独的Thread
上进行。
不幸的是,JTree
的大小(以及因此包含的标签的大小)将受到包含JTree
的父容器的限制。当JTree
的大小增加时,此大小不会自动增长。