JTreeの各ノードに異なるアイコンを設定したいのですが、実際には各ノードをデータベースからロードしていますが、whileは各アイコンをルートのように設定しています。葉または親。このように:Jtreeの各ノードにアイコンを設定
private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;
そして、これは私が私のノードを設定するコードです:
すべての私の宣言はグローバルで
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はこれです:
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;
}
トレモデルをノードで塗りつぶした後、モデルを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が実行されますが、これは必要ありません。
WOW!私は2週間の答えを探している、友人と私はたくさんの読書をしていましたが、今回私たちは混乱しました。単純なコードを表示するには、コードは完璧です、私はそれをテストし、後でそれがどのように動作するかを教えます。 ありがとうございました! – Vlad
うん!それは完璧に動作します!再度、感謝します!!! – Vlad