我有以下问题(这与我的文章blink a tree node有关):
我有一个自定义单元格渲染器。
在我的代码一些部分我创建了一个新的DefaultMutableTreeNode,并在列表通过引用操作jtree节点似乎不工作(摆动)
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分支。
为什么?我无法理解,因为我已经将它存储在数组列表中。我有不同的参考吗?
此外,我创建了一个秋千计时器:
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();在计时器,并在单元格渲染我遍历所有的节点,看它是否显示与我已存储节点的sametext,我想我所得到的闪烁,工作
感谢
好的,这是有道理的。但NPE怎么样在treePath? – Cratylus 2010-12-22 20:02:07
不确定。 tree.repaint()是否工作?它只是越来越是问题的边界吗? – jzd 2010-12-22 20:46:09