Создание обработчиков для обработчиков MOUSE_PRESSED
, MOUSE_DRAGGED
и MOUSE_RELEASED
. Проверьте, находится ли событие внутри узла в MOUSE_DRAGGED
.
Пример
@Override
public void start(Stage primaryStage) throws Exception {
Button button = new Button("Drag me");
final String style = "-fx-background-color: red;";
button.setOnMousePressed(evt -> {
if (evt.isPrimaryButtonDown()) {
button.setStyle(style);
}
});
button.setOnMouseDragged(evt -> {
if (evt.isPrimaryButtonDown()) {
button.setStyle(button.contains(evt.getX(), evt.getY()) ? style : null);
}
});
button.setOnMouseReleased(evt -> {
button.setStyle(null);
});
Scene scene = new Scene(new StackPane(button), 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
Кстати: проверка источника в обработчике событий в большинстве случаев является плохой практикой, поскольку вы можете легко избежать проверки, зарегистрировав обработчик событий только для узла, с которым вы сравниваете свойство source
события.