создание MouseEvent в JavaFX
мне нужно имитировать MouseEvent.MOUSE_CLICKED
. Я хочу использовать fireEvent метод конкретного узел для отправки события вышеупомянутого типа. Тем не менее, я борюсь с его созданием. Оказывается, что javafx.сцена.вход.События mouseevent не имеет допустимого конструктора, но старый java.awt.event.MouseEvent
объекты могут быть созданы таким образом. Тем не менее, я не нашел никакого рабочего решения для преобразования. Как мне быть? это?
спасибо.
4 ответов
вы можете создать MouseEvent, используя устаревший MouseEvent.API для impl_mouseEvent. Я сделал это ранее в этом форум thread для JavaFX 2.0. Обратите внимание, что API устарел по какой - то причине-это частный API, используемый в реализации JavaFX, и API не гарантирует сохранение той же подписи или даже существование в будущих версиях (что может быть подтверждено, потому что исходный код, который я разместил в потоке форума, больше не компилируется.
правильный решение для создания такого события должно иметь общедоступный API, поэтому поддержите это. Уже был подан запрос на предоставление этой функции RT-9383 "добавьте правильные конструкторы и заводские методы в классы событий, удалите impl". Этот jira планируется завершить в следующем году для JavaFX 3.0.
тем временем, использование класса роботов, как предлагает Сергей, вероятно, ваш лучший метод.
обновление: добавлена Java 8 общедоступные конструкторы для javafx.событие.События mouseevent и (как указано в ответе Джея Таккара), вы можете запустить такое событие, используя событие.fireEvent (можно события пожара на Windows).
это вызовет один основной щелчок мыши на вашем узле:
import javafx.event.Event;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
Event.fireEvent(YOUR NODE, new MouseEvent(MouseEvent.MOUSE_CLICKED, 0,
0, 0, 0, MouseButton.PRIMARY, 1, true, true, true, true,
true, true, true, true, true, true, null));
или вы можете использовать простой "хак", чтобы сделать программный нажмите на кнопку. Создайте этот метод в классе "Util":
public static void click(javafx.scene.control.Control control) {
java.awt.Point originalLocation = java.awt.MouseInfo.getPointerInfo().getLocation();
javafx.geometry.Point2D buttonLocation = control.localToScreen(control.getLayoutBounds().getMinX(), control.getLayoutBounds().getMinY());
try {
java.awt.Robot robot = new java.awt.Robot();
robot.mouseMove((int)buttonLocation.getX(), (int)buttonLocation.getY());
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.mouseMove((int) originalLocation.getX(), (int)originalLocation.getY());
} catch (Exception e) {
e.printStackTrace();
}
}
затем, чтобы "нажать" на кнопку, просто вызовите метод нажать кнопку передав в качестве параметра.
когда вы устанавливаете обработчик, он устанавливает общественную собственность. Вы можете получить событие из этого свойства и вызвать handle ():
button1.setOnMouseClicked()....
the corresponding property is
button1.onMouseClickedProperty().get().handle(me);//where me is some MouseEvent object