У меня следующая проблема (это связано с моим постом мигать узлом дерева ):
У меня есть пользовательское средство визуализации ячеек.
В некоторой части моего кода я создаю новый 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);
}
});
Но я получаю NPE в tree.getPathBounds
.
Я не могу понять, почему. Не могу ли я манипулировать DefaultMutableNodes, которые я хранил в своем списке таким образом? Что я делаю не так в своих мыслях?
Примечание: если я просто позвоню repaint (); в таймере и в модуле рендеринга я перебираю узлы, чтобы увидеть, отображает ли он тот же текст с сохраненным мной узлом, что я хочу получить, мигает, работает
Спасибо