Java JTree-JLabel更新

Java JTree-JLabel更新,java,swing,jlabel,jtree,Java,Swing,Jlabel,Jtree,JTree中某些节点的标签表示计数器,经过一些计数后,计数器的长度会增加。这就产生了一个缩写(…)。假设您有一棵树,其中每个节点都可以在任何时间点更改其标签大小 在一个单独的线程中,每100ms重新绘制一次树(tree.repaint()),以跟踪图标和标签的变化,这些变化是跟踪事件和时间进度的结果。我尝试了一种方法,在每个树节点上用nodeChanged()调用替换repaint()方法。树开始摇曳 为了根据这些节点标签的新长度更新它们,我需要做什么? 我已经在扩展DefaultTreeCel

JTree中某些节点的标签表示计数器,经过一些计数后,计数器的长度会增加。这就产生了一个缩写(…)。假设您有一棵树,其中每个节点都可以在任何时间点更改其标签大小

在一个单独的线程中,每100ms重新绘制一次树(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中做些什么

在一个单独的线程中,每100ms重新绘制一次树(tree.repaint()),以跟踪图标和标签的变化,这些变化是跟踪事件和进度的结果

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

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

在一个单独的线程中,每100ms重新绘制一次树(tree.repaint()),以跟踪图标和标签的变化,这些变化是跟踪事件和进度的结果

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


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

我需要做什么-->类似的
JComboBox
JList
JTable
JTree
的概念,我不是在这里判断,也许你是对的,你的回答很差(我从来没有检查过用户档案),但是我正在发布渲染器概念的链接,在这里搜索渲染器和首选大小我需要做什么-->类似于
JComboBox
JList
JTable
JTree
,我在这里不作判断,也许你是对的,你的答案很差(我从来没有检查过用户配置文件),但是我在发布渲染器概念的链接,在这里搜索渲染器&首选大小如果你把JTree放在一个JScrollPane中,JTree的大小将调整为其首选大小。@GuillaumePolet确实如此,但这并不能解决可见性问题,因为您必须水平滚动,这与放大父容器一样简单,以便标签不再被截断。另一个选择是选择一个多行文本区域,并希望您有足够的垂直空间实际上有足够的空间用于我的目的,但标签在长度增加时会被截断。由于数据和gui是严格分开的,因此在没有额外的更新线程的情况下无法触发事件。。。。“非AWT事件导致GUI必须更新的程序:例如,假设服务器程序可以从可能在不同机器上运行的其他程序获取请求。这些请求可以在任何时候出现,它们导致服务器的一个方法在某个可能未知的线程中被调用。该方法如何更新GUI?通过在事件调度线程中执行GUI更新代码。“如果将JTree放在JScrollPane中,JTree的大小将调整为其首选大小。@GuillaumePolet确实如此,但这并不能解决可见性问题,因为您必须水平滚动,这与放大父容器一样简单,这样标签就不再被截断。”。另一个选择是选择一个多行文本区域,并希望您有足够的垂直空间实际上有足够的空间用于我的目的,但标签在长度增加时会被截断。由于数据和gui是严格分开的,因此在没有额外的更新线程的情况下无法触发事件。。。。“非AWT事件导致GUI必须更新的程序:例如,假设服务器程序可以从可能在不同机器上运行的其他程序获取请求。这些请求可以在任何时候出现,它们导致服务器的一个方法在某个可能未知的线程中被调用。该方法如何更新GUI?通过在事件调度线程中执行GUI更新代码。”