In fact, a decent solution was found: override JComponent.getToolTipText() .
One disturbing nuance of this is the code from JComponent.setToolTipText ():
public void setToolTipText(String text) { String oldText = getToolTipText(); putClientProperty(TOOL_TIP_TEXT_KEY, text); ToolTipManager toolTipManager = ToolTipManager.sharedInstance(); if (text != null) { if (oldText == null) { toolTipManager.registerComponent(this); } } else { toolTipManager.unregisterComponent(this); } }
So, if you override getToolTipText to return some kind of dynamic value, it is better to return null on the first call, or the tooltip of your tool will not be registered in ToolTipManager.
source share