【发布时间】: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