Как я могу вызвать событие щелчка в компоненте с помощью класса Robot?

Мне нужно вызвать MouseEvent mouseClicked на JLabel (или любой другой компонент в этом отношении). Как мне это сделать?

Я попробовал это с помощью класса Robot следующим образом:

try {
    Robot r=new Robot();
    r.mouseMove(jl.gettX(), jl.getY());//jl is the JLabel
    r.mousePress(InputEvent.BUTTON1_MASK);
    r.mouseRelease(InputEvent.BUTTON1_MASK);
} catch (AWTException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

но getX() и getY() возвращают x,y позиции родителя компонента. Как получить абсолютную позицию компонента, чтобы запустить Robot.mousePress()? Есть ли другой способ вызвать событие для определенного компонента?


person sasidhar    schedule 01.11.2011    source источник
comment
почему отрицательный голос?? Я думаю??   -  person sasidhar    schedule 01.11.2011


Ответы (2)


Вы должны использовать Component.getLocationOnScreen( ) вместо этого. Этот метод возвращает абсолютные координаты.

person AlexR    schedule 01.11.2011
comment
Я задавался тем же вопросом. gLOS правильно использовать, чтобы получить «местоположение на экране». @mKorbel, если вы заметили, почему редактирование? - person Andrew Thompson; 01.11.2011
comment
хм, я собираюсь использовать JLabel OP, тогда зачем приводить JLabel к компоненту, но согласился :-) - person mKorbel; 01.11.2011

Я бы порекомендовал использовать FEST-Swing, который позволяет писать код, похожий на этот dialog.button("ok").click();

Обычно он используется для тестирования компонентов Swing, но на самом деле вы можете использовать его и в других раз тоже. Возможно, вам будет полезно установить имя компонента, чтобы вы могли легко найти его с помощью fest.

person lexicalscope    schedule 01.11.2011