加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-Swing可以告诉我是否有活动的工具提示吗?

发布时间:2020-12-14 19:31:32 所属栏目:Java 来源:网络整理
导读:Swing中是否有一种优雅的方法来查找框架中当前是否显示任何工具提示? 我使用的是自定义工具提示,因此在我的createToolTip()方法中设置标记非常容易,但是我看不到找到工具提示何时消失的方法. ToolTipManager对此有一个很好的标记,tipShowing,但它当然是私有

Swing中是否有一种优雅的方法来查找框架中当前是否显示任何工具提示?

我使用的是自定义工具提示,因此在我的createToolTip()方法中设置标记非常容易,但是我看不到找到工具提示何时消失的方法.

ToolTipManager对此有一个很好的标记,tipShowing,但它当然是私有的,他们似乎没有提供实现它的方法. hideWindow()不会调出工具提示组件(可以告诉我),所以我看不到那里的方法.

有人有什么好主意吗?

更新:我进行了反思.您可以在此处查看代码:

private boolean isToolTipVisible() {
    // Going to do some nasty reflection to get at this private field.  Don't try this at home!
    ToolTipManager ttManager = ToolTipManager.sharedInstance();
    try {
        Field f = ttManager.getClass().getDeclaredField("tipShowing");
        f.setAccessible(true);

        boolean tipShowing = f.getBoolean(ttManager);

        return tipShowing;

    } catch (Exception e) {
        // We'll keep silent about this for now,but obviously we don't want to hit this
        // e.printStackTrace();
        return false;
    }
}
最佳答案
似乎hideTipAction的isEnabled()属性直接绑定到tipShowing布尔值.您可以尝试以下方法:

public boolean isTooltipShowing(JComponent component) {
    AbstractAction hideTipAction = (AbstractAction) component.getActionMap().get("hideTip");
    return hideTipAction.isEnabled();
 }

您可能想要对null等进行完整性检查.但这应该可以使您更加接近.

编辑,对您的答复:

缺少一些难看的反射代码,我认为您没有太多选择.由于包私有的构造函数,您不能继承ToolTipManager的子类,并且showTipWindow()和hideTipWindow()也是包私有的,因此Adapter模式也不可用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读