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