【发布时间】:2010-03-13 00:04:28
【问题描述】:
我有一个组件,我想在其中显示自定义 jtooltip。这很简单,只需更改 getTooltip 方法即可。位置和文本类似。
但是我也想更改计时器。如果鼠标悬停在组件的单元格渲染器上,则应始终显示工具提示。如果它留下所有这些,它应该变成隐形的。 我知道我可以使用 TooltipManager 来控制全局时间。但最好的解决方案可能只是缩短它并使用鼠标侦听器自己显示工具提示。但是,当我尝试这样做时(在 TooltipManager 中取消注册组件并将工具提示设置为可见,在鼠标侦听器中使用文本和正确位置),工具提示根本不会显示。我做错了什么?
编辑: 现在问题变了!分为 2 个问题。
我现在的解决方案是这样,但是它会丢失 jtooltip 总是显示的阴影 有时 令人沮丧,如果鼠标 退出 到弹出窗口本身,它会被隐藏。如果弹出窗口甚至不是组件,如何过滤弹出窗口上的 mouseexit 事件?我可以根据 lastPosition 进行一些黑客攻击,但这似乎很愚蠢,因为我真的不知道它的宽度。
private Popup lastPopup;
private final JToolTip tooltip = ...;
private Point lastPoint;
@Override public void mouseMoved(MouseEvent e) {
Point p = privateToolTipLocation(e);
if (p == null || p.equals(lastPoint)) {
return;
}
lastPoint = p;
tooltip.setTipText(privateToolTipText(e));
//copy
p = new Point(p);
SwingUtilities.convertPointToScreen(p, this);
Popup newPopup = PopupFactory.getSharedInstance().getPopup(this, tooltip, p.x, p.y);
if (lastPopup != null) {
lastPopup.hide();
}
lastPopup = newPopup;
newPopup.show();
}
@Override public void mouseExited(MouseEvent e) {
if (lastPopup != null && someUnknownCondiction) {
lastPopup.hide();
lastPopup = null;
}
}
【问题讨论】: