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

#java #swing #event-handling #mouseevent #awtrobot

#java #swing #обработка событий #mouseevent #awtrobot

Вопрос:

Мне нужно вызвать 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() ? Есть ли какой-либо другой способ вызвать событие для определенного компонента?

Комментарии:

1. почему голосование отрицательное?? интересно??

Ответ №1:

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

Комментарии:

1. Я задавался тем же вопросом. gLOS является ли правильным использовать для получения «местоположения на экране». @mKorbel если вы заметили, зачем редактировать?

2. хммм, я прохожу через JLabel OP, тогда зачем использовать JLabel для компонента, но согласен 🙂

Ответ №2:

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

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