JavaSwing:如果工具提示即将可见,如何得到通知?

JavaSwing:如果工具提示即将可见,如何得到通知?,java,swing,Java,Swing,我有很多组件可以通过JComponent.setToolTipText(…)设置工具提示。然而,这些工具提示经常根据许多事件而变化。每次发生这些事件时,我都可以调用setToolTipText(…);但我更希望有一个工具提示侦听器,在提示即将显示时通知我,以便我可以在需要时更新提示。我找不到为工具提示分配侦听器的方法,我是否缺少一个 *注意,我的解决方案需要与Java 1.4.2兼容。我不确定是否有一种简单的方法可以通知此事件。然而,听起来你可能需要改变你的设计。必须用不断变化的工具提示更新大量

我有很多组件可以通过
JComponent.setToolTipText(…)
设置工具提示。然而,这些工具提示经常根据许多事件而变化。每次发生这些事件时,我都可以调用setToolTipText(…);但我更希望有一个工具提示侦听器,在提示即将显示时通知我,以便我可以在需要时更新提示。我找不到为工具提示分配侦听器的方法,我是否缺少一个


*注意,我的解决方案需要与Java 1.4.2兼容。

我不确定是否有一种简单的方法可以通知此事件。然而,听起来你可能需要改变你的设计。必须用不断变化的工具提示更新大量组件似乎很奇怪,也有问题。可能只是添加一个通用的MouseListener,它在当前时间确定当前组件的消息。这将使您不必经常更改所有组件。

实际上找到了一个不错的解决方案:重写
JComponent.getToolTipText()

一个令人不安的细微差别是JComponent.setToolTipText()中的代码:


因此,如果您重写GetToolTiptText以返回一些动态值,最好在第一次调用它时返回null,否则您的工具提示将无法在ToolTipManager中注册。

重写JComponent的createToolTip(),这将充当侦听器,每当要创建工具提示时,都会调用此方法

“。我的解决方案需要与Java 1.4.2兼容。”您确实意识到1.4已经过时了,不是吗?如果你的回答是,你的客户使用1.4,我会指出,在某个时候,支持较旧的JRE将花费你比那些客户能够产生的收入更多。这是我的回答,你的观点是非常正确的。但是,我是一个低级的开发人员,不做这些决定。有一些选项可以自己创建onw工具提示,无论是对于Java1.4还是Java1.6,这都无关紧要,因为我认为从Java1.4开始,这个恐龙没有任何变化
  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);
        }
    }