• 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

display icon/text on right of selected node in jtree

 
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I want to display an icon or a text to the right of the selected node on the JTree. Any idea on how to implement this?
Say,
100 A
where, 100 is selected and A is beside it and not selected.
Thanks
 
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You can easily extend DefaultTreeCellRenderer to do this and set it as the cell renderer for your JTree by calling tree.setCellRenderer() with your new cell renderer.
 
pavan in
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Nathan, I have extended defaultTreeCellRenderer. But, how to set the text so that some part of text is selected and some not selected.
say,
100 A
where 100 is selected and A is not selected.
See code below -
public Component getTreeCellRendererComponent(
JTree m_tree, Object m_value, boolean m_isSelected,
boolean m_isExpanded, boolean m_isLeaf, int m_row,
boolean m_hasFocus) {

super.getTreeCellRendererComponent( m_tree, m_value, m_isSelected,
m_isExpanded, m_isLeaf, m_row, m_hasFocus);
Component compObject = this;

if ( m_value instanceof EuamDefaultMutableTreeNode ) {
EuamDefaultMutableTreeNode node = (EuamDefaultMutableTreeNode)m_value;
setText( node.getText() );
setIcon(m_isExpanded ? node.getOpenIcon() : node.getClosedIcon() );

}
else {
setText(m_value.toString());
}
return compObject;
}
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Pavan,

Here's an example of how I added the desired functionality to the renderer... Enjoy!

 
pavan in
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks a loot Nathan. I havent run it, but I think it will work. That was very very useful.
Thanks again.
 
pavan in
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Nathan,
Can I perform this task on node selection (in valuechanged method of TreeSelectionAdapter)?
I have a tree that is built initially, and I get the text (to be displayed next to node text) from the database only when the user selects the node.
Can I do this task?
Is node.setUserObject() do the task?
Thanks.
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
In the example I provided, the EuamDefaultMutableTreeNode class contains the number... so you would initially start it out at 0 (or some other default value) when you created it, and then in your selection listener you would cast the selected node to a EuamDefaultMutableTreeNode and call setNumber( int ) on it...
 
pavan in
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Nathan,
Is it possible to associate an listener (say, mouseClick) on the text displayed on the right hand side of the node data.
i.e, for the text '100 A', can I associate an listener to the text 'A' so that when the user clicks on 'A', some method is called.
Thanks
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Yes... you could just add a MouseListener to the tree or the cell renderer.
 
pavan in
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I dont want the listener to be added to the text on the left hand side. MouseListener will corresponds to the whole text (left and right), isnt it?
How do I add listener to the cell renderer?
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Sorry... just tried this out for real, and the tree "eats" all the events for the rendererers, so you can't add a listener on the renderer.

However, I did find some code here that shows how to differentiate areas of the renderer using a listener on the JTree.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic