Search code examples
javaswingtooltipjtreerenderer

JTree node's changable tooltip


I have a JTree populated with some (custom) nodes. I have a class that's subclass of DefaultTreeCellRenderer and using that "MyTreeCellRenderer" i can set tooltips for each node in my tree. It works fine: JTree is populated, cell renderer is set, all added nodes do have tooltips. Problem is that i don't know how to change tooltip for certain node in already populated tree... How to do that? Is there any way to "recreate" cell renderer for just one node in JTree?


Solution

  • I did it! Instead of using extended CellRenderer i used "getTooltipText" method of tree (i extended the tree). That way i was able to control text of tooltip according to object that has mouse pointer over it.

    @Override
    public String getToolTipText(MouseEvent evt) {
        if (getRowForLocation(evt.getX(), evt.getY()) == -1)
          return null;
        TreePath curPath = getPathForLocation(evt.getX(), evt.getY());
        TreeNode node = (TreeNode)curPath.getLastPathComponent();
        if(something)
            return "Empty";
    
        if(something_else)
            return "Not empty";
    
        return null;
      }
    

    You will also need to tell the tooltip manager about your tree before the tooltips will render:

    ToolTipManager.sharedInstance().registerComponent(myTree);