Re: tooltips for Jtree nodes
Andrey Kuznetsov wrote:
I have a JTree with a custom Node class. The jtree represents an LDAP
structure so container nodes can contain varying numbers of children. I
want to show the children count in a tooltip and I found code online that
shows how to do this however I thought it was supposed to change/update the
tooltip even when adjacent nodes had the same number of children and
therefore the same tooltip text but that isn't the case.
If I hover the mouse over a node in the middle of the tree and move the
cursor up 5 nodes and all 5 nodes have 0 children then the same tooltip is
displayed for each one but the tooltip is in the *same* location too. And
that location is the location that the first tooltip appeared in for the
first node the mouse was on. Is there any way for the tooltip to "follow"
the node that the cursor is on?
after mouse moves to another node
getToolTipText(MouseEvent e) must to return null one time,
then return chilren count (as String)
Andrey
Ok that sort of makes sense but I've attempted to set it to null and
still can't get it to work. That approach basically means that a user
has to move the cursor over the node to first reset the tooltip to null
then move the cursor enough to make the tooltip reappear with the
correct text. Is that correct? If so, that sounds stupid.
I set a global member to keep track of which node was the last one the
mouse was over and check each time the mouse moves as to whether or not
the current node the mouse is over is the same as the one stored but it
isn't showing the tooltip at all once I select a node and then move the
mouse over other nodes. The tooltips stop appearing until I move over a
node, then move the mouse again but stay on that node, and only then
does the tooltip appear again.
lastToolTipNode is declared globally in the class as my custom tree node
type called "Node".
public String getToolTipText(MouseEvent e) {
Object tip = null;
TreePath path = getPathForLocation(e.getX(), e.getY());
if (path != null) {
tip = path.getLastPathComponent();
}
if (tip == null)
return null;
if (lastToolTipNode != null && !lastToolTipNode.equals(tip) ) {
System.out.println(lastToolTipNode + " last " + tip + " current" );
lastToolTipNode = (Node)tip;
return null;
}
else {
System.out.println(lastToolTipNode + " last " + tip + " current else" );
lastToolTipNode = (Node)tip;
int s = ((Node)tip).getSubs();
if ( ((Node)tip).getIsUpdated() )
return s + " children";
else
return "Unknown children";
}
}