gpt4 book ai didi

java - 扩展 Swing 的 ToolTipManager 以更改悬停时的行为?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:11 25 4
gpt4 key购买 nike

我想在 Swing 中实现一个具有自定义行为的工具提示:用户悬停在组件上的时间越长,工具提示中应显示的详细信息就越多(即,几秒钟后添加几行新行)用户悬停在组件上)。我只需要检查这是否真的适用于 Swing 而不会变得太乱。我现在的想法可能是:

  • 扩展工具提示管理器
  • 覆盖 mouseEntered 以启动计时器(也许使用 javax.swing.Timer?)。调用 setToolTipText 和 createToolTip 刷新工具提示并定期添加新信息
  • 覆盖 mouseExited 以重置计时器
  • 可能使用 setDismissDelay 将关闭延迟设置为更长的时间(或 Integer.MAX_VALUE)

这样的事情是否可行,或者这不是使用 Swing 的好方法(抱歉,我对它还很陌生)?有更好的方法吗?

[edit] 嗯,记得 ToolTipManager 是一个单例,其构造函数仅具有包可见性,因此无法扩展。

[edit 2] 目前我正在尝试一些解决方案。我忘记添加的一件事是我确实需要知道哪个组件正在悬停 - 我想这意味着我需要使用某种带有 mouseEntered() 方法的监听器(或者能够访问它信息)。不需要与弹出窗口/工具提示进行其他交互 - 它只需要显示信息。

最佳答案

(这可能看起来有点令人困惑,所以如果您需要我澄清,请告诉我,我会尽力向您展示我是如何描绘代码的)我认为如果您扩展它,您的想法可能会奏效,并且还创建一个扩展 Thread 的私有(private)类,然后在 run() 方法中执行类似

的操作
while(true)
{
sleep(1);
timeElapsed++;
}

在扩展 ToolTipManager 的类中,为扩展 Thread 的类创建一个字段,并在 mouseEntered(MouseEvent e) 实例化像这样的东西:

extendsThreadClass = new ExtendsThreadClass();
extendsThreadClass.start();

然后在 mouseExited(MouseEvent e) 方法中执行

extendsThreadClass = null;

然后在 mouseEntered(MouseEvent e) 方法中启动 Thread 然后你可以在时间之后做你想做的事情,比如

if(timeElapsed > 3000)
{
//what you want to do here
}

抱歉,这可能会造成混淆,如果我可以为您解决问题,请告诉我

关于java - 扩展 Swing 的 ToolTipManager 以更改悬停时的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30368649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com