JTree - JLabel更新

时间:2012-06-20 13:11:27

标签: java swing jlabel jtree

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”的问题?

1 个答案:

答案 0 :(得分:3)

  

树在单独的线程中每100毫秒重新绘制一次(tree.repaint()),以跟踪更改的图标和更改标记,这些标记是跟踪事件和时间进度的结果

错误,TreeModel应根据跟踪的事件触发事件,JTree会自动更新。这些更改当然应该在EDT上进行,而不是在单独的Thread上进行。

不幸的是,JTree的大小(以及因此包含的标签的大小)将受到包含JTree的父容器的限制。当JTree的大小增加时,此大小不会自动增长。