На самом деле найдено достойное решение: переопределить JComponent.getToolTipText()
.
Один неприятный нюанс - это код из 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);
}
}
Итак, если выпереопределите getToolTipText для возврата некоторого динамического значения, лучше вернуть null при первом вызове, иначе ваша подсказка не будет зарегистрирована в ToolTipManager.