다음 게시물을 가지고 있습니다 : 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 지점에 절대 들어 가지 않습니다.
왜? 나는 이미 그것을 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()를 호출하면됩니다. 타이머와 노드를 통해 셀 렌더링 I 루프는 내가 저장 한 노드와 sametext를 표시하는 경우, 내가이 깜박 얻을 원하는 것을 참조
감사
그래서'DefaultMutableTreeNodes'의 목록이 저장되어 있고 각 사각형에 (스윙 타이머에서) 다시 그리기를 원한다면 어떻게해야합니까? 왜냐하면 유일한 방법은 저장된 노드로부터'TreePath'를 생성 한 다음'getPathBounds'를 호출하는 것입니다. 그러나 이것은 (내 게시물에서 언급 한 것처럼) 작동하지 않습니다. 그렇다면 저장된 노드의 사각형을 어떻게 얻을 수 있습니까? – Cratylus