How to Change the icon of a selected Tree Node

Hi java gurus,

i am working on Jtree application, and i am adding image icons to the Nodes.

my dought is when i select a node, i want to display that selected node as opened and all other icons should remain closed.

Example:

--root

|

-child

-child1

-child2

|

-SubChild

-SubChild1

-subchild2

Here if i am selecting Child2 means, only the image icon of that child2 should open the nodes and display the icon , all other icons from root to subchild should remain same as closed.

please some one suggest how i can do it,

Thanks in advance,

Cheers,

Murali

[664 byte] By [muralijavaa] at [2007-10-3 10:25:16]
# 1
Use a custom renderer. http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html#display
PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 2
refer this link http://forum.java.sun.com/thread.jspa?threadID=755439&messageID=4316522
raja8nza at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 3

> Use a custom renderer.

> http://java.sun.com/docs/books/tutorial/uiswing/compon

> ents/tree.html#display

hi PhHein ,

Thanks for your reply,

i went through this link, and i used that example but i am not able to get it.

i want to display the nodes ,as that is displayed in windows explorer.

when i selected a node , the image should display , and when i selected another node, this current node should display the image ,and the previous node should close.

please suggest some other example.

Thanks in advance,

Cheers,

Murali

muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 4

Hi Murali,

did you actually check the sel flag? [snip]

if(sel){

setIcon(iconSelected);

}else{

setIcon(iconNotSelected);

}

[snip]

PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 5

hi PhHein ,

Thank u for your reply,

i have tried on this and i have looked in to so many examples, using

setIcon(iconSelected);

but it is not working,

i will try on this again and see,

please can you suggest some other exaples.

Thank u,

Cheers,

Murali

muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 6
Here are many tree examples: http://javaalmanac.com/egs/javax.swing.tree/pkg.html
PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 7

hi PhHein ,

Thank you for your reply,

http://groups.google.com/group/comp.lang.java.gui/browse_thread/thread/7680a7746ab59fbd/f0b56a3bd6ef85d7?lnk=st&q=void+seticon(icon+icon)+example+for+jtree&rnum=6&hl=en#f0b56a3bd6ef85d7

http://www.javalobby.org/forums/thread.jspa?threadID=16326&tstart=15

http://www.codase.com/search/display?file=L2dlbnRvbzIvdmFyL3RtcC9yZXBvcy9zb3VyY2Vmb3JnZS9tamJ3b3JsZC9tamJXb3JsZF9qb2dsX3NvdXJjZV82MDBfemlwL21qYndvcmxkL3NvdXJjZS9tamJXb3JsZC9tdHJlZUNlbGxSZW5kZXJlci5qYXZh&lang=java&off=975+993+

http://groups.google.com/group/comp.lang.java.gui/browse_thread/thread/f491cfe06c151b9e/10bcb6dbd697ce74%2310bcb6dbd697ce74

http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html

http://java.sun.com/docs/books/tutorial/uiswing/components/label.html

http://www.java2s.com/Code/Java/Swing-Components/IconNodeTreeExample.htm

http://www.javareference.com/jrexamples/viewexample.jsp?id=46

http://doc.trolltech.com/4.2/widgets-icons.html

i have searched and went through this examples, some were very useful

I will look in to that site,

Thank u onceagain

Thanks,

Cheers,

Murali

muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 8
You should consider posting your renderer code here, I think that might help finding problems.
PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 9

Hi Philip,

Thank you very much for your reply,

i am posting my file, i am not able to find the mistakes, i think the error is in "if statement".

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTree;

import javax.swing.JPopupMenu;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.TreeSelectionModel;

import javax.swing.event.TreeSelectionEvent;

import javax.swing.event.TreeSelectionListener;

import javax.swing.tree.DefaultTreeCellRenderer;

import javax.swing.ImageIcon;

import javax.swing.tree.TreePath;

import java.net.URL;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.event.*;

public class TreeEx1

{

JFrame frame;

JTree mytree;

JScrollPane scrollpane;

public TreeEx1()

{

//Creating Frame

frame=new JFrame("Tree & ComboBox");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLayout(null);

//Creating Tree Nodes

DefaultMutableTreeNode rootnode=new DefaultMutableTreeNode("Root Node");

DefaultMutableTreeNode childnode=new DefaultMutableTreeNode("Child Node");

DefaultMutableTreeNode childonenode=new DefaultMutableTreeNode("ChildOne Node");

DefaultMutableTreeNode adapter1=new DefaultMutableTreeNode("Adapter 1");

DefaultMutableTreeNode adapter2=new DefaultMutableTreeNode("Adapter 2");

DefaultMutableTreeNode childtwonode=new DefaultMutableTreeNode("ChildTwo Node");

DefaultMutableTreeNode adapter3=new DefaultMutableTreeNode("Adapter 1");

DefaultMutableTreeNode adapter4=new DefaultMutableTreeNode("Adapter 2");

mytree = new JTree(rootnode);

scrollpane = new JScrollPane(mytree);

scrollpane.setBounds(new Rectangle(20,20,200,500));

/*// Creatin Image Icons to Nodes

Icon main=new ImageIcon("images/Main.jpg");

Icon main_sub = new ImageIcon("images/Main_Sub.jpg");

Icon main_child= new ImageIcon("images/Main_Child.jpg");

*/

/*Icon main=new ImageIcon("Main.jpg");

Icon main_sub = new ImageIcon("Main_Sub.jpg");

Icon main_child= new ImageIcon("Main_Child.jpg");

Icon main_open=new ImageIcon("folderOpen.gif");

Icon main_close = new ImageIcon("folder.gif");

Icon main_leaf= new ImageIcon("folder.gif");

*/

ImageIcon main_open= createImageIcon("left.gif");

ImageIcon main_close =createImageIcon("folder.gif");

ImageIcon main_leaf= createImageIcon("right.gif");

DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)mytree.getCellRenderer();

renderer.setLeafIcon(main_leaf);

renderer.setClosedIcon(main_close);

renderer.setOpenIcon(main_open);

mytree.setCellRenderer(renderer);

rootnode.add(childnode);

childnode.add(childonenode);

childnode.add(childtwonode);

childonenode.add(adapter1);

childonenode.add(adapter2);

childtwonode.add(adapter3);

childtwonode.add(adapter4);

frame.getContentPane().add(scrollpane,BorderLayout.CENTER);

frame.setSize(1025,750);

frame.setVisible(true);

ImageIcon leafIcon = createImageIcon("right.gif");

ImageIcon leafOpen = createImageIcon("left.gif");

ImageIcon leafClosed = createImageIcon("folder.gif");

if (leafIcon != null)

{

//DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();

renderer.setLeafIcon(leafClosed);

mytree.setCellRenderer(renderer);

if(leafIcon == null)

{

renderer.setLeafIcon(leafOpen);

mytree.setCellRenderer(renderer);

}

else

{

renderer.setLeafIcon(leafClosed);

mytree.setCellRenderer(renderer);

}

}

else if(leafIcon == null)

{

renderer.setOpenIcon(leafOpen);

mytree.setCellRenderer(renderer);

System.err.println("Leaf icon missing; using default.");

}

else

{

renderer.setClosedIcon(leafClosed);

mytree.setCellRenderer(renderer);

}

} // End of Constructor TreeEx()

public static ImageIcon createImageIcon(String path)

{

URL imgURL = TreeEx1.class.getResource(path);

URL imgURL1 = TreeEx1.class.getResource(path);

if((imgURL != null))

{

return new ImageIcon(imgURL);

}

else if((imgURL == null))

{

return new ImageIcon(imgURL1);

}

else

{

System.out.println("Hello ");

System.err.println("Couldn't find file: " + path);

return null;

}

}

//Main()

public static void main(String[] args)

{

TreeEx1 treeex1=new TreeEx1();

System.out.println("Tree Combo Example");

}// End of main()

}// End of Class

Thanks,

Cheers,

Murali.

muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 10

Oh dear, that could have been a lot easier. You didn't implement a renderer. Reread the Tree tutorial. I've done a simple one:

// class TreeEx1

public class TreeEx1 {

JFrame frame;

JTree mytree;

JScrollPane scrollpane;

public TreeEx1() {

// Creating Frame

frame = new JFrame("Tree & ComboBox");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLayout(null);

// Creating Tree Nodes

DefaultMutableTreeNode rootnode = new DefaultMutableTreeNode(

"Root Node");

DefaultMutableTreeNode childnode = new DefaultMutableTreeNode(

"Child Node");

DefaultMutableTreeNode childonenode = new DefaultMutableTreeNode(

"ChildOne Node");

DefaultMutableTreeNode adapter1 = new DefaultMutableTreeNode(

"Adapter 1");

DefaultMutableTreeNode adapter2 = new DefaultMutableTreeNode(

"Adapter 2");

DefaultMutableTreeNode childtwonode = new DefaultMutableTreeNode(

"ChildTwo Node");

DefaultMutableTreeNode adapter3 = new DefaultMutableTreeNode(

"Adapter 1");

DefaultMutableTreeNode adapter4 = new DefaultMutableTreeNode(

"Adapter 2");

mytree = new JTree(rootnode);

mytree.setCellRenderer(new TreeExRenderer()); // <-setRenderer

scrollpane = new JScrollPane(mytree);

scrollpane.setBounds(new Rectangle(20, 20, 200, 500));

rootnode.add(childnode);

childnode.add(childonenode);

childnode.add(childtwonode);

childonenode.add(adapter1);

childonenode.add(adapter2);

childtwonode.add(adapter3);

childtwonode.add(adapter4);

frame.getContentPane().add(scrollpane, BorderLayout.CENTER);

frame.setSize(1025, 750);

frame.setVisible(true);

} // End of Constructor TreeEx()

// Main()

public static void main(String[] args) {

TreeEx1 treeex1 = new TreeEx1();

System.out.println("Tree Combo Example");

}// End of main()

}// End of Class

And this would be a simple Renderer:

public class TreeExRenderer extends DefaultTreeCellRenderer {

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {

super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,

row, hasFocus);

ImageIcon leafIcon = createImageIcon("right.gif");

ImageIcon leafOpen = createImageIcon("left.gif");

ImageIcon leafClosed = createImageIcon("folder.gif");

ImageIcon main_open = createImageIcon("left.gif");

ImageIcon main_close = createImageIcon("folder.gif");

ImageIcon main_leaf = createImageIcon("right.gif");

if (!expanded) {

setIcon(leafClosed);

}else{

setIcon(leafOpen);

}

if(sel){

setIcon(leafIcon);

}

return this;

}

public static ImageIcon createImageIcon(String path) {

URL imgURL = TreeEx1.class.getResource(path);

URL imgURL1 = TreeEx1.class.getResource(path);

if ((imgURL != null)) {

return new ImageIcon(imgURL);

} else if ((imgURL == null)) {

return new ImageIcon(imgURL1);

} else {

System.out.println("Hello ");

System.err.println("Couldn't find file: " + path);

return null;

}

}

}

PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 11
Hi Philip,Thank u very much, its working , The problem is solved .As u suggested i wll look into Jtree document,Thank u,Cheers,Murali.
muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 12
You're welcome. I'm glad it's working now.
PhHeina at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 13
Hi Philip,Thank u very much,Thanks,Cheers, Murali.
muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 14
Hi philip,Please, In future , If i have any doubts, how can i contact you in this forum.ie: How can i send you an question etc in this forum.Personally.Thank you & Cheers,Murali
muralijavaa at 2007-7-15 5:47:14 > top of Java-index,Desktop,Core GUI APIs...
# 15
You can't and you shouldn't. Just post your questions here and I or any other member will try to answer them.
PhHeina at 2007-7-21 13:14:04 > top of Java-index,Desktop,Core GUI APIs...