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

Sco*_*ttm 25 java performance user-interface swing tooltip

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

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

Noe*_*din 28

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

(在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);
  }
});
Run Code Online (Sandbox Code Playgroud)


jjn*_*guy 7

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

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

*编辑*您可以计算每个单词的tootips JEditorPane并将它们存储在a中Map.然后你要做的就是从Map它变化后访问tootip .

理想情况下,人们不会同时移动鼠标和打字.因此,您可以在文本更改时计算出tootlips,然后从中Map打开它们mouseMoved().


Den*_*kiy 6

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

首先你需要 PopupFactory、Popup 和 ToolTip:

private PopupFactory popupFactory = PopupFactory.getSharedInstance();
private Popup popup;
private JToolTip toolTip = jEditorPane.createToolTip();
Run Code Online (Sandbox Code Playgroud)

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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