gpt4 book ai didi

java - 如何使用自定义模型更新树节点大小?

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:38 25 4
gpt4 key购买 nike

我在 JTree 中使用自定义模型.当某些节点的标签发生变化时,我通过以下方式将 TreeModelEvent 传递给监听器:

       protected void fireNodeChanged(TreePath path) {
TreeModelEvent evt = new TreeModelEvent(this, path);
for(TreeModelListener listener : listeners) {
listener.treeNodesChanged(evt);
}
}

其中 path 是更改节点的路径,包括它本身。

这会导致标题改变,但它的大小不会:

enter image description here

Swing 截断标题并添加省略号(用红色箭头指向)。

如何解决这个问题?请注意,我有自定义模型,无法调用 nodeChanged ,我应该效仿它。

最佳答案

如果没有片段,可以做出多种猜测,但这种情况对我来说似乎很熟悉。尝试向您的 JTree 添加一个渲染器,在返回之前在渲染组件上执行 updateUI():

tree.setCellRenderer(new DefaultTreeRenderer() {
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
Component c = super.getTreeCellRendererComponent(tree, value,
selected, expanded, leaf, row, hasFocus);
// You can do more changes here
((JComponent) c).updateUI();
return c;
}});

关于更新,如果“模仿”意味着实现它并做应该做的事情,那是正确的。只要它实现了 TreeModel 并且方法完成了预期的工作,JTree 就应该完成剩下的工作。

截断可能与以下事实有关:树和表格没有将它们的“组件”布置出来,而是使用渲染器将它们绘制在伪造的容器中。

顺便说一句,你可以看看 EventListenerList用于适当收集事件监听器。

关于java - 如何使用自定义模型更新树节点大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26003531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com