• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

JTree: How to refresh and keep icons at their nodes?

 
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi all, I have created a JTree with specific node-icons on each level. For example: The root shows a globe, the children show cities, the leaves show persons,... All in all the tree contains 5 levels of nodes:
root [globe]
|
x-level2 [city]
|
x-level3 [house]
|
x-level4 [family]
|
x-leaf [person]
Everything works fine until I refresh the JTree:
-the city-icon moves to the place of level3-node
-the house-icon moves to the place of level4-node
-the family-icon moves to the place of level2-node
Root and leaf stay as they are, as they are created by a different query than the other nodes.
Has anyone an idea how to solve this problem?
Thanks in advance!
Tom

DefaultMutableTreeNode top = new DefaultMutableTreeNode();
final JTree tree = new JTree(top);
JScrollPane treeView = new JScrollPane(tree);
...
tree.setCellRenderer(new IconRenderer());
...
//Class for setting up the tree icons
class IconRenderer extends DefaultTreeCellRenderer {
ImageIcon globe;
ImageIcon city;
ImageIcon house;
ImageIcon family;
ImageIcon person;
public IconRenderer() {
globe = new ImageIcon("img/globe.gif");
city = new ImageIcon("img/city.gif");
house = new ImageIcon("img/house.gif");
family = new ImageIcon("img/family.gif");
person = new ImageIcon("img/person.gif");
}//end public IconRenderer()...
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);
//Set up city icon
if (checkComponent(value) == 1) {
setIcon(city);
}
//Set up house icon
if (checkComponent(value) == 2) {
setIcon(house);
}
//Set up family icon
if (checkComponent(value) == 3) {
setIcon(family);
}
//Set up person icon
if (leaf) {
setIcon(person);
}
//Set up globe icon
if (row == 0) {
setIcon(globe);
}
return this;
}//end public Component getTreeCellRendererComponent( JTree tree,...
protected int checkComponent(Object value) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
Object nodeInfo = (Object)(node.getUserObject());
TreeNode rootNode = node.getRoot();
TreeNode cityNode = null;
TreeNode houseNode = null;
//rootNode is after refresh == cityNode
for (int i = 0; i <= rootNode.getChildCount() - 1; i++ ) {<br /> cityNode = rootNode.getChildAt(i);<br /> if (nodeInfo.toString() == cityNode.toString()) {<br /> return 1; //=> cityNode
}//end if...
for (int j = 0; j <= cityNode.getChildCount() - 1; j++ ) {<br /> houseNode = cityNode.getChildAt(j);<br /> if (nodeInfo.toString() == houseNode.toString()) {<br /> return 2; //=> houseNode
}//end if...
}//end for (int j = ...
}//end for (int i = ...
return 3; //=> contractNode
}//end protected boolean....
}//end class IconRenderer extends DefaultTreeCellRenderer...
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic