0

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;
}

为了“修复”“setText”的问题,我应该在 CellRenderer 中做什么?

4

1 回答 1

3

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

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

不幸的是, 的大小JTree(以及其中包含的标签的大小)将受到包含 的父容器的JTree限制。而且这个尺寸不会随着你的尺寸增长而自动JTree增长。

于 2012-06-20T13:37:28.567 回答