2012-04-09 3 views
3

Я пытаюсь получить координаты компонента, например метку. Я попробовал getBounds и getLocation, однако они не дают точных координат, если метка находится на 2 или более панелях. Помимо getLocationOnScreen, есть ли способ получить точные координаты компонентов, даже если они находятся на более чем 1 панели?Как можно получить координаты компонентов Swing независимо от его родителя?

+0

Как ярлык может быть на нескольких панелях? – trashgod

+0

Я имею в виду, что у вас более одной панели, наложенной друг на друга, каждая из которых содержит свои компоненты, а метка не находится непосредственно на основной панели. – ict1991

+0

А, вы имеете в виду более чем один (вложенный) «Контейнер». Что случилось с 'getLocationOnScreen()'? – trashgod

ответ

5

Если вы хотите его по отношению к фрейму, то вам придется сделать что-то вроде этого:

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).

+0

спасибо, что это прекрасно работает – ict1991

+2

Я не могу спорить с _that_! :-) Редактировать, ну, желая этого, нужно задать один вопрос. – trashgod

3

Попробуйте компонент. getLocationOnScreen()

Как говорит Javadoc,

Получает расположение этого компонента в виде точки с указанием верхнего левого угла компонента в пространстве координат экрана.

+0

@AndrewThompson Спасибо :) Мне потребовался почти месяц за последние 100 повторений! #LazyTheseDays: D – COD3BOY

+0

Нет стресса, мы все даем, когда успеем. Никаких обязательств (и без сожалений). –

+0

@AndrewThompson Thats it! :), и я жду, чтобы пожелать вам на 50-тысячной вехе :) – COD3BOY

Смежные вопросы