[질문]자바(Swing)에서 노드 검색 후 selected시키는 문제
친화력
트리내에서 임의의 특정 노드가 있는지를 알고 싶은데요.
JTree에서 그러한 함수를 지원해 주나요?
API에선 못찾았습니당.
트리의 어느 특정 노드를 찾을 때, 루트 노드부터 하나씩 찾아갈려니까, 너무 복잡하더이다.
트리 클래스를 확장해야 하나.. ㅠ.ㅜ
트리에서 노드를유일하게 식별하기 위해서TreePath 를 이용합니다.
root/programming/java/swing
뭐 이런식으로 루트부터 그 노드까지의 path 를 나타내는 클래스인데,
요놈을 얻어내려면 DefaultTreeModel 에서 구하는 메소드가 있습니다만...
님처럼 특정 노드를 알고 싶다라고 질문한다면 정보가 좀 부족합니다..
무슨 말이냐면 그 노드의 이름으로 찾겠다는 것인지,
아니면 트리노드가 DefaultMutableTreeNode 일 경우에 노드가 가지고 있는 userObject 를 비교해서 찾겠다는 것인지
명확하지가 않죠... 그래서 JTree 에도 특정 노드를 찾는 메소드가 없습니다.(뭘 가지고 찾아야 할지 알 수 없으므로..)
트리 이름이라도
root/computer/java
root/java/swing
과같이 같은 이름을 가진 노드가 존재할수 있고 또한 순환적으로 노드를 포함할 수 있기 때문에
특정 노드를 유일하게 구분할 수 있는 무언가가 제시되어야합니다.(아이디와 같은 것...)
간단하게 노드의 이름을 통해서 노드를 검색한다고 하면 다음 함수를 이용하면 될 것 같습니다.
(단, 트리 노드 중 같은 이름을 가진 노드가 없을 경우)
publicTreeNode findTreeNode(TreeNode node, String name)
{
int cnt = node.getChildCount();
for( int i = 0 ; i cnt ; i++){
TreeNode child = node.getChild(i);
if ( child.toString().equals(name) ) return child;
if ( ! child.isLeaf() ) return findTreeNode(child, name);
}
return null;
}
쓸때는
TreeNode rootNode = (TreeNode)tree.getModel().getRoot();
TreeNode aNode = findTreeNode(rootNode, java);
노드에서 이름 또는 코드로 검색하여 찾았습니다.그리고 확장까지 했습니다.
머..이런식으로요.. tree.collapseNodebyValue(nodenm);
근데,,문제는 확장까지는 되었는데 selected가 되지 않는군요..VB처럼 setSelectedItem(nodenm)같은 함수가 있는거 같지 않고 이벤트를 발생시키거나,,treePath를 이용해야 할 것 같은데..
될 듯 하면서도 안되네요...알고 계신다면 서슴없는 가르침^^바랍니다~