KJW*_*KJW 1 java swing jtree repaint treemodel
基本上我编辑属性private string status="OK"
中UserObject()
的一个DefaultTreeNode()
.
我有其中CustomRenderer implements DefaultCellRenderer
,其通过渲染的"OK"属性设置图标UserObject
的TreeNode
.
最初,当我选择一个节点时,图标会发生变化.我正在使用Tree.revalidate()
&Tree.repaint()
,并且正在反映这一变化.
但是,我不确定这是否非常有效.这样做的正确方法是什么?我尝试过,TreeModel.nodesChanged(new DefaultMutableTreeNode(myUserObject))
但TreeNodeChanged event
不会开火.
因此,每次更改TreeNode的用户工作以查看图形更新时,我是否坚持使用重新绘制整个树?
使用显示的方法TreeIconDemo2
根据模型的值调整渲染器.例如,
private class MyRenderer extends DefaultTreeCellRenderer {
private Icon okIcon;
public MyRenderer(Icon okIcon) {
this.okIcon = okIcon;
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(
tree, value, sel, exp, leaf, row, hasFocus);
YourMutableTreeNode node = (YourMutableTreeNode) value;
if (leaf && node.getStatus().equals("OK")) {
setIcon(okIcon);
}
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
附录:你不能简单地调用nodeChanged()
一个TreeNode
不属于树的新东西; 新节点没有父节点.如果指定现有节点nodeChanged()
,则通知将自动发生.如果需要的话,有一个搜索树的例子在这里.
归档时间: |
|
查看次数: |
3729 次 |
最近记录: |