gpt4 book ai didi

java - 如何更改 1 个组件的 jtooltip 计时器

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:13 25 4
gpt4 key购买 nike

我有一个组件,我想在其中显示自定义 jtooltip。那很容易,只需更改 getTooltip 方法即可。位置和文本类似。

但是我也想更改计时器。如果鼠标悬停在组件的 cellrenderer 上,则应始终显示工具提示。如果它离开所有这些,它应该变成不可见的。我知道我可以使用 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;
}
}

最佳答案

与其尝试重新实现工具提示的显示,不如向组件添加鼠标监听器,当鼠标进入和离开组件上方的区域时更改全局工具提示计时器。

下面是一些示例代码:

instantTooltipComponent.addMouseListener(new MouseAdapter() 
{
final int defaultTimeout = ToolTipManager.sharedInstance().getInitialDelay();

@Override
public void mouseEntered(MouseEvent e) {
ToolTipManager.sharedInstance().setInitialDelay(0);
}

@Override
public void mouseExited(MouseEvent e) {
ToolTipManager.sharedInstance().setInitialDelay(defaultTimeout);
}
});

这应该会在鼠标移到您的组件上时将工具提示延迟更改为零,并在鼠标离开您的组件时将其更改回默认延迟。

关于java - 如何更改 1 个组件的 jtooltip 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com