我想在设置提示JEditorPane
。 我用它来确定要显示的工具提示文本的方法是相当CPU密集型 - 所以我想只显示它的鼠标已经停止了很短的时间量之后 - 例如1秒。
我知道我可以使用ToolTipManager.sharedInstance().setInitialDelay()
但是这将设置的延迟时间在所有Swing组件提示一次,我不想这样。
我想在设置提示JEditorPane
。 我用它来确定要显示的工具提示文本的方法是相当CPU密集型 - 所以我想只显示它的鼠标已经停止了很短的时间量之后 - 例如1秒。
我知道我可以使用ToolTipManager.sharedInstance().setInitialDelay()
但是这将设置的延迟时间在所有Swing组件提示一次,我不想这样。
好吧,我会建议做CPU密集型任务在另一个线程,因此不会中断正常的GUI任务。
这将是一个更好的解决方案。 (而不是试图绕过这个问题)
*编辑*你可能计算tootips在每一个字JEditorPane
并将其存储在一个Map
。 然后,所有你必须做的就是访问tootip出的Map
,如果它的变化。
理想情况下人们不会移动鼠标,并在同一时间打字。 所以,你可以计算出tootlips文本发生变化时,只是拉他们从Map
上mouseMoved()
如果你想要的是让工具提示隐藏延迟更长的特定组件,那么这是一个很好的破解:
(荣誉给技术在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,弹出窗口,工具提示和:
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();
}
这会给你可调延迟和很多麻烦:)