如何获得Swing组件的坐标,无论其父级是什么?

时间:2012-04-09 08:44:29

标签: java swing components coordinates

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

3 个答案:

答案 0 :(得分:5)

如果你想要它相对于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)

答案 1 :(得分:3)

尝试组件。getLocationOnScreen()

正如Javadoc所说,

  

以点的形式获取此组件的位置,指定组件在屏幕坐标空间中的左上角。

答案 2 :(得分:3)

作为getLocationOnScreen()的替代方案,您可以使用MouseEvent中的getXOnScreen()getYOnScreen()Zoom就是一个例子。