
Первоначально я сделал настройку тестирования из 2 фреймы, но, предвидя проблемы, свел его к минимально воспроизводимому примеру моей проблемы: одиночный JFrame с кнопкой, которая печатает «Hello world!». Кнопка должна быть программно нажата и отпущена, что должно вызвать ее действие.
Код: Выделить всё
public static void minimalExample() {
var frame = new JFrame("Target");
var content = frame.getContentPane();
var button = new JButton(
new AbstractAction(
"Hello world"
) {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello world");
}
});
content.add(button);
frame.pack();
frame.setVisible(true);
new Thread(() -> {
try {
SwingUtilities.invokeAndWait(() ->
button.dispatchEvent(new MouseEvent(
button,
MouseEvent.MOUSE_CLICKED,
System.currentTimeMillis(),
MouseEvent.BUTTON1,
5, 5,
1,
false
)));
System.out.println("Clicked");
SwingUtilities.invokeAndWait(() ->
button.dispatchEvent(new MouseEvent(
button,
MouseEvent.MOUSE_PRESSED,
System.currentTimeMillis(),
MouseEvent.BUTTON1,
5, 5,
0,
false
)));
System.out.println("Pressed");
Thread.sleep(500);
SwingUtilities.invokeAndWait(() ->
button.dispatchEvent(new MouseEvent(
button,
MouseEvent.MOUSE_RELEASED,
1,
MouseEvent.BUTTON1,
5, 5,
0,
false
)));
System.out.println("Released");
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}).start();
}
Код: Выделить всё
Hello world
Clicked
Pressed
Hello world
Released
Очевидно, что-то не так с отправленными событиями или вообще с такими событиями.
Как реализовать интерактивное масштабированное изображение выбранного компонента? Графика проработана, но передача необработанных взаимодействий в настоящее время кажется невозможной.
Обновление: насколько я понимаю, класс Robot может использоваться для взаимодействия с видимой частью графического интерфейса, но это не так, поскольку целевая оболочка может быть дочерней областью просмотра, что может сделать часть ее области недоступной для взаимодействия с пользователем.
Подробнее здесь: https://stackoverflow.com/questions/799 ... to-another
Мобильная версия