我有很多组件可以使用JComponent.setToolTipText(...)
设置工具提示。但是,这些工具提示通常会根据许多事件进行更改。每次发生其中一个事件时我都可以调用setToolTipText(...);但我更愿意只是有一个工具提示监听器,当提示将要显示时通知我,以便我可以根据需要更新提示。无论如何我都找不到将监听器分配给工具提示,我错过了一个吗?
*注意,我的解决方案需要符合Java 1.4.2。
答案 0 :(得分:3)
实际上找到了一个不错的解决方案:覆盖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注册。
答案 1 :(得分:2)
我不确定是否有一种简单的方法可以通知此事件。但是,听起来您可能需要更改设计。必须使用不断变化的工具提示更新大量组件似乎很奇怪且有问题。也许只需添加一个通用的MouseListener来确定当前时间当前组件的消息。这将使您不必不断更改所有组件。
答案 2 :(得分:0)
重写JComponent的createToolTip()这将充当监听器,每当要创建工具提示时,都会调用此方法。