Ich möchte für jeden Knoten in meinem JTree ein anderes Icon setzen, eigentlich lade ich jeden Knoten aus einer Datenbank, mit einem "while" setze ich jedes Icon wie eine Wurzel, Blatt oder Elternteil. Wie folgt aus:Setze ein Icon auf jeden Knoten in Jtree
Alle meine Erklärungen sind global:
private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;
Und dies ist der Code, wo ich meine Knoten gesetzt:
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*/
}
Verfahren makeNode ist dies:
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;
}
Nachdem ich das Treemodel mit meinen Knoten gefüllt habe, setze ich das Modell auf meinen JTree:
myJTree.setModel(treeModel);
myJTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
Aber das Problem ist. wenn ich versuche, die Symbole zu setzen. Ich erstelle eine Unterklasse namens myTreeRenderer, und ich verwende diese:
myJTree.setCellRenderer(new treeRenderer());
Aber es stellt nicht die Symbole, wie ich will, ist die Unterklasse:
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;
}
Wie ich das Symbol für jeden Satz kann Knoten ohne seinen Namen zu verwenden? Der Code der Unterklasse setzt alle Knoten mit demselben Symbol, und jedes Mal, wenn ich im jtree einen Knoten auswähle, läuft die getTreeCellRendererComponent, das will ich nicht.
WOW! Ich habe zwei Wochen lang eine solche Antwort gesucht, ein Freund und ich haben viel gelesen und die ganze Zeit waren wir verwirrt. Zur einfachen Ansicht ist der Code perfekt, ich werde ihn testen und später erzählen, wie es funktioniert. Vielen Dank für Ihre Hilfe !!! – Vlad
Ja! Es funktioniert perfekt !!! Danke noch einmal!!! – Vlad