【发布时间】:2023-04-08 22:13:01
【问题描述】:
我有以下问题(这与我的帖子blink a tree node有关):
我有一个自定义单元格渲染器。
在我的代码的某些部分,我创建了一个新的 DefaultMutableTreeNode 并将其存储在一个列表中
public static List<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>()
//in some time
DefaultMutableTreeNode aNode = new DefaultMutableTreeNode("SomeValue");
nodes.add(node);
在我的单元格渲染器中我这样做:
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode)value;
if(nodes.contains(n)){
//set background to red
}
}
此时节点有一个节点,但代码永远不会进入 if 分支。
为什么?我无法理解,因为我已经将它存储在 arraylist 中。我会得到不同的参考吗?
我还创建了一个摇摆计时器:
Timer t = new Timer(400, new ActionListener(){
public void actionPerformed(ActionEvent evt) {
if(nodes.size == 0)
return;
TreePath p = new TreePath(nodes.get(0));
Rectangle r = tree.getPathBounds(p);
tree.repaint(r);
}
});
但我在tree.getPathBounds 中获得了 NPE。
我不明白为什么。我不能以这种方式操作存储在列表中的 DefaultMutableNodes 吗?我的想法做错了什么?
注意:如果我只是调用 repaint();在计时器和单元格渲染器中,我循环遍历节点以查看它是否显示与我存储的节点相同的文本,我想要什么我得到闪烁,工作
谢谢
【问题讨论】:
标签: java user-interface swing jtree