Définir l'icône de chaque nœud dans Jtree
Je veux mettre pour chaque nœud dans mon JTree une icône différente, en fait, je suis le chargement de chaque nœud à partir d'une base de données, avec un "tout", j'ai mis chaque icône comme une racine, feuille, ou d'un parent. Comme ceci:
Toutes mes déclarations sont globales:
private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;
Et c'est le code où j'ai mis mes nœuds:
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*/
}
La méthode makeNode est-ce:
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;
}
Après pour remplir le treemodel avec mes nœuds, j'ai mis le modèle à mon JTree:
myJTree.setModel(treeModel);
myJTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
Mais le problème est. lorsque je tente de régler les icônes. J'ai créer une sous-classe appelée myTreeRenderer, et j'utilise ceci:
myJTree.setCellRenderer(new treeRenderer());
Mais il ne définit pas les icônes que je veux, la sous-classe est:
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;
}
Comment je peux définir l'icône pour chaque nœud, sans l'aide de son nom? Le code de la sous-classe, comme il est, l'ensemble de tous les nœuds avec la même icône, et à chaque fois j'ai choisi un nœud dans le jtree, le getTreeCellRendererComponent fonctionne, je ne veux pas cela.
OriginalL'auteur Vlad | 2013-12-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez modifier l'INTERFACE utilisateur par défaut les valeurs pour les icônes de
JTree
de noeuds, sans aucun moteur de rendu personnalisé:ou utiliser quelque chose comme suivant:
Également lire le rendu mécanisme.
Ouais! Il fonctionne parfaitement!!! Merci encore!!!
OriginalL'auteur alex2410
Vous pouvez l'utiliser, un plus court chemin. "l'arbre" est mon JTree composant.
OriginalL'auteur mesutpiskin