【问题标题】:Swing getLocationOnScreen method on component inside a layout在布局内的组件上摆动 getLocationOnScreen 方法
【发布时间】:2014-12-16 19:23:03
【问题描述】:

需要帮助:

我尝试对放置在 FlowLayout 中的每个组件调用 getLocationOnScreen() 并最终获得相同的位置。

这是设计使然还是我做错了什么?那么我应该如何获得每个组件的确切位置呢?

这是我刚刚创建的示例

JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
frame.getContentPane().add(panel);

for (int i = 0; i < 4; i++) {
    JLabel label = new JLabel("Label " + i);
    panel.add(label);
    System.out.println("getLocationOnScreen-" + i
        + " x:" + label.getLocationOnScreen().x
        + " y:" + label.getLocationOnScreen().y);           
}

它在控制台中打印为:

getLocationOnScreen-0 x:0 y:44
getLocationOnScreen-1 x:0 y:44
getLocationOnScreen-2 x:0 y:44
getLocationOnScreen-3 x:0 y:44

如果您能对此提供帮助,我们将不胜感激! 谢谢!

【问题讨论】:

  • 如果在显示帧之前完成,你会得到一个异常。如果之后完成,则需要在每次新添加时重新验证框架,以便在添加时获取该特定实例的位置。请注意,在后一种情况下,循环完成后位置将不是正确的位置,因为标签会随着每次添加而移动
  • 也许解释一下你想要达到的目标将有助于解决任何“真正的”问题。我非常怀疑用例正在打印位置
  • panel.validate() 添加到您的循环中,看看会发生什么。
  • [...]实际用例将显示与布局中的标签相关的气球弹出窗口。您在寻找tool tip吗? @JunjieChen
  • @dic19 或 baloon tip :-D

标签: java swing layout awt


【解决方案1】:

基于this comment

...实际用例将显示与布局中的标签相关的气球弹出窗口。

您似乎有一个XY problem:您正在询问屏幕上的组件位置,但您真正想要做的是为每个标签显示一个弹出气球。

Swing 内置了这样的功能,它被称为工具提示。看看How to Use Tool Tips课程,了解如何使用它们。

另外,正如 @peeskillet 所建议的,还有一个名为 Balloon tip 的第三方库可用,值得一看。

【讨论】:

  • 感谢您的帮助和天才 cmets,我检查了 Ballon 提示,它看起来非常适合!
猜你喜欢
  • 2013-09-08
  • 1970-01-01
  • 2015-02-04
  • 2021-04-10
  • 1970-01-01
  • 2020-10-13
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多