在Java Swing中设置特定组件的工具提示延迟时间

我正在尝试在JEditorPane上设置工具提示。 我用来确定要显示的工具提示文本的方法是CPU密集型的 – 所以我只想在鼠标停止很短的时间后显示它 – 比如1秒。

我知道我可以使用ToolTipManager.sharedInstance().setInitialDelay() ,但这会立即设置所有swing组件上工具提示的延迟时间,我不想这样做。

好吧,我建议在另一个线程上执行CPU密集型任务,这样就不会中断正常的GUI任务。

那将是一个更好的解决方案。 (而不是试图规避问题)

*编辑*您可以计算JEditorPane每个单词的tootips并将它们存储在Map 。 然后,如果它发生变化,您只需要访问Map的tootip即可。

理想情况下,人们不会同时移动鼠标和打字。 因此,您可以在文本更改时计算tootlips,只需从mouseMoved()上的Map拉出它们即可。

如果您想要的是使工具提示解除特定组件的延迟更长时间,那么这是一个很好的黑客:

(在http://tech.chitgoks.com/2010/05/31/disable-tooltip-delay-in-java-swing/上获得科技奖励 )

 private final int defaultDismissTimeout = ToolTipManager.sharedInstance().getDismissDelay(); addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent me) { ToolTipManager.sharedInstance().setDismissDelay(60000); } public void mouseExited(MouseEvent me) { ToolTipManager.sharedInstance().setDismissDelay(defaultDismissTimeout); } }); 

您可以自己显示弹出窗口。 侦听mouseMoved()事件,启动/停止计时器,然后使用以下代码显示弹出窗口:

首先,您需要PopupFactory,Popup和ToolTip:

 private PopupFactory popupFactory = PopupFactory.getSharedInstance(); private Popup popup; private JToolTip toolTip = jEditorPane.createToolTip(); 

然后,显示或隐藏工具提示:

 private void showToolTip(MouseEvent e) { toolTip.setTipText(...); int x = e.getXOnScreen(); int y = e.getYOnScreen(); popup = popupFactory.getPopup(jEditorPane, toolTip, x, y); popup.show(); } private void hideToolTip() { if (popup != null) popup.hide(); } 

这会给你可调节的延迟和很多麻烦:)