【问题标题】:How is it possible to get the coordinates of a Swing components, irrespective to its parent?如何获取 Swing 组件的坐标,而不管其父级如何?
【发布时间】:2012-04-21 16:28:53
【问题描述】:

我正在尝试获取组件的坐标,例如标签。我尝试了 getBounds 和 getLocation,但是如果标签位于 2 个或更多面板上,它们不会给出准确的坐标。除了 getLocationOnScreen 之外,还有没有办法能够获得准确的组件坐标,即使它们位于多个面板上?

【问题讨论】:

  • 一个标签如何出现在多个面板上?
  • 我的意思是,你有多个面板相互分层,每个面板都包含它们的组件,并且标签不直接在主面板上
  • 啊,你的意思是不止一个(嵌套的)ContainergetLocationOnScreen() 怎么了?
  • 我无法重现此内容。编辑您的问题以包含显示您描述的问题的sscce 可能会有所帮助。
  • “我正在尝试获取组件的坐标,..” 为什么?它支持什么程序功能?

标签: java swing components coordinates


【解决方案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 里程碑:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多