JTree의 각 노드에 다른 아이콘을 설정하고 싶습니다. 실제로는 각 노드를 데이터베이스에서로드하는 중입니다. while은 각 아이콘을 루트와 같이 설정하고, 잎 또는 부모. 이처럼 :Jtree의 각 노드에 아이콘 설정
private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;
그리고 이것은 내 노드 설정하는 코드입니다 :
내 모든 선언은 전역
public DefaultMutableTreeNode makeNode(DefaultMutableTreeNode parent){
//The second column in the RS is the name of the node
treeModel.insertNodeInto((childNode=new DefaultMutableTreeNode(myResultSet.getString(2))),parent,parent.getChildCount());
return childNode;
}
:
myResultSet=rtnNodes(); /*Method that returns a RS with my nodes*/
while(myResultSet.next()){
switch(myResultSet.getInt(1)){ /*The first column is the type of node: root, parent, leaf...*/
case 0: treeModel = new DefaultTreeModel((rootNode=new DefaultMutableTreeNode(myResultSet.getString(2)))); break; /*root node*/
case 1: case 4: parent1 = parent2 = makeNode(rootNode); break; /*parent node*/
case 2: makeNode(parent2); break; /*leaf node*/
case 3: parent2 = makeNode(parent1); break; /*sub patern node*/
} /*makeNode is the method where I create the nodes*/
}
메소드 makeNode이입니다
treodemel을 내 노드로 채운 후에 모델을 JTree로 설정합니다 :
myJTree.setModel(treeModel);
myJTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
하지만 문제가 있습니다. 언제 아이콘을 설정하려고합니다. 내가 myTreeRenderer라는 서브 클래스를 생성하고, 나는이 사용
myJTree.setCellRenderer(new treeRenderer());
을하지만 내가 원하는대로 아이콘을 설정하지 않습니다, 서브 클래스는 다음과 같습니다
private ImageIcon root,parent,leaf;
public myTreeRenderer() {
root=setIcons(2); /*setIcons is a method that I dont publish in this post, that helps me to set the path of the icons*/
parent=setIcons(3);
leaf=setIcons(4);
}
@Override
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus){
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
DefaultMutableTreeNode nodo = (DefaultMutableTreeNode)value;
TreeNode t = nodo.getParent();
if(t!=null){
setIcon(root);
}
return this;
}
내가 각각의 아이콘을 설정하는 방법 그의 이름을 사용하지 않고 노드? 하위 클래스의 코드는 그대로 모든 아이콘을 같은 아이콘으로 설정하고 jtree에서 노드를 선택할 때마다 getTreeCellRendererComponent가 실행됩니다. 원하는 것은 아닙니다. 다음과 같은 일을
URL resource = logaff.class.getResource(IMAGE);
Icon icon = new ImageIcon(resource);
UIManager.put("Tree.closedIcon", icon);
UIManager.put("Tree.openIcon", icon);
UIManager.put("Tree.leafIcon", icon);
또는 사용 :
와우! 나는 2 주간에 그와 같은 대답을 찾고있다. 친구와 나는 많이 읽었고 이번에는 혼란 스러웠다. 간단한 코드보기는 완벽합니다. 테스트 해보고 어떻게 작동하는지 나중에 알려 드리겠습니다. 도움을 주셔서 감사합니다. – Vlad
예! 그것은 완벽하게 작동합니다! 다시 한 번 감사드립니다! – Vlad