我想在 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/