第二台显示器上的工具提示显示在显示器的边缘

发布于 2024-08-10 03:46:38 字数 317 浏览 4 评论 0原文

我有一个组件。组件的 ToolTip 通过 setToolTipText() 方法设置。在第一台显示器上一切正常。现在,当我将框架移动到第二个显示器时,工具提示将显示在显示器的边缘(第一个显示器的一侧)。这种情况仅发生在该组件的工具提示中。该问题也出现在其他机器上。然而,我只在 Vista 上测试过它。

这是为什么呢? 这是 Swing 中的错误吗? 我该如何修复它?

工具提示文本取决于鼠标光标位置。因此,我可以编辑代码并重写 getToolTipText(MouseEvent e) 方法。在开始更改代码之前,如果能知道这个问题的原因是什么,那就太好了。

提前致谢。

I have got a component. The ToolTip of the component is set by the setToolTipText() method. On the first monitor everything works fine. Now when I move the frame to the second monitor, the tooltips are displayed at the edge of the monitor (on the side to the firt monitor). This happens only with tooltips of this component. The problem appeares on other machines, too. Yet, I've only tested it with Vista.

Why is this?
Is this a bug in Swing?
How can I fix it?

The tooltip-text depends on the mouse cursor location. Therefore I may edit the code and override the getToolTipText(MouseEvent e) method. It would be realy nice to know, whats the reason for this problem, before starting to change the code.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪冰清 2024-08-17 03:46:38

Java bug 数据库中有几个 bug 票证似乎与此相关,例如

工具提示问题使用双显示器(双头)配置。

JApplet 中的 JToolTip 将在中放置工具提示错误的监视器

某些多监视器配置的操作按钮工具提示出现问题

一个被关闭为另一个的重复,一个声称已修复,另一个具有修复理解集。

一些用户发布的一种解决方法是

frame.pack();
frame.setLocation(location);
frame.setLocation(new Point(0, 0));
frame.setLocation(location);

基隆·威尔金森

这有效的原因是
setLocation() 最终调用
Component.reshape() 依次
调用一个名为
Component.notifyNewBounds(boolean resized, boolean moving),其中
横穿组件层次结构
设置每个组件的边界。经过
默认这是“懒惰地”完成的,但是
它们在窗口打开之前没有设置
感动了。上面的代码迫使他们
已设置。

这也是为什么将窗口从一个屏幕拖动到另一个屏幕后工具提示开始正常工作的原因。

There are several bug tickets in the Java bug database which seem to relate to this e.g.

Tooltip issue when using dual monitor (dual head) configuration.

JToolTip in JApplet will place tooltip in wrong monitor

Problem with Action button tooltips with some multiple monitor configurations

On is closed as duplicate of another, one claims to be fixed and another has fix-understood set.

One workaround posted by some user is

frame.pack();
frame.setLocation(location);
frame.setLocation(new Point(0, 0));
frame.setLocation(location);

kieron.wilkinson

The reason this works is that
setLocation() eventually calles
Component.reshape() which in turn
calls a method called
Component.notifyNewBounds(boolean resized, boolean moved), which
transverses the component hierarchy
setting each components bounds. By
default this is done "lazyily" but
they are not set before the window is
moved. The above code forces them to
be set.

This is also why the tooltips start working properly after dragging the window from one screen to another.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文