如何获取 Swing 组件的坐标,而不管其父级如何?
Posted
技术标签:
【中文标题】如何获取 Swing 组件的坐标,而不管其父级如何?【英文标题】:How is it possible to get the coordinates of a Swing components, irrespective to its parent? 【发布时间】:2012-04-21 16:28:53 【问题描述】:我正在尝试获取组件的坐标,例如标签。我尝试了 getBounds 和 getLocation,但是如果标签位于 2 个或更多面板上,它们不会给出准确的坐标。除了 getLocationOnScreen 之外,还有没有办法能够获得准确的组件坐标,即使它们位于多个面板上?
【问题讨论】:
一个标签如何出现在多个面板上? 我的意思是,你有多个面板相互分层,每个面板都包含它们的组件,并且标签不直接在主面板上 啊,你的意思是不止一个(嵌套的)Container
。 getLocationOnScreen()
怎么了?
我无法重现此内容。编辑您的问题以包含显示您描述的问题的sscce 可能会有所帮助。
“我正在尝试获取组件的坐标,..” 为什么?它支持什么程序功能?
【参考方案1】:
如果您希望它相对于 JFrame,那么您必须执行以下操作:
public static Point getPositionRelativeTo(Component root, Component comp)
if (comp.equals(root)) return new Point(0,0);
Point pos = comp.getLocation();
Point parentOff = getPositionRelativeTo(root, comp.getParent());
return new Point(pos.x + parentOff.x, pos.y + parentOff.y);
或者你可以只使用内置的解决方案SwingUtilities.convertPoint(comp, 0, 0, root)
。
【讨论】:
我无法反驳那个! :-) 编辑,很希望这应该提出一个问题。【参考方案2】:作为getLocationOnScreen()
的替代方案,您可以使用MouseEvent
中的getXOnScreen()
和getYOnScreen()
。 Zoom
就是一个例子。
【讨论】:
【参考方案3】:试试组件。getLocationOnScreen()
正如 Javadoc 所说,
以点的形式获取该组件的位置,该点指定组件在屏幕坐标空间中的左上角。
【讨论】:
@AndrewThompson 谢谢 :) 最后 100 次重复我花了将近一个月的时间! #LazyTheseDays :D 没有压力,我们都会尽力而为。没有义务(也没有遗憾)。 @AndrewThompson 就是这样! :) 我等着祝你达到 50K 里程碑:)以上是关于如何获取 Swing 组件的坐标,而不管其父级如何?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不添加我自己的 prop 的情况下将内置的 Vuetify 组件 prop 从其父级应用到 SFC 的根元素?
如何从 angular-material2 对话框与其父级进行通信
如何在 React Native 中获取 TextInput 相对于其父级或屏幕的光标位置