I want to fire some action when there was NO drag event between mouse pressed and released events. In other words - when user kept his mouse cursor still while clicking. The question is specificly about rective way achive it. Really would appreciate RxJava2 solution (I'm using it with RxJavaFx).
Asked
Active
Viewed 196 times
2 Answers
0
Observable.combineLatest(
JavaFxObservable.eventsOf(panel1, MouseEvent.DRAG_DETECTED).map(event -> System.currentTimeMillis()).startWith(System.currentTimeMillis()),
JavaFxObservable.eventsOf(panel1, MouseEvent.MOUSE_PRESSED).map(event -> System.currentTimeMillis()),
JavaFxObservable.eventsOf(panel1, MouseEvent.MOUSE_RELEASED).map(event -> System.currentTimeMillis()),
(dragDectedMillis, pressedMillis, releasedMillis) -> releasedMillis > pressedMillis && dragDectedMillis < pressedMillis ? true : false)
.filter(noDragDetected -> noDragDetected)
.subscribe(next -> System.out.println("Action"));

Przemek Krysztofiak
- 113
- 6
0
import io.reactivex.Observable;
import io.reactivex.rxjavafx.observables.JavaFxObservable;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class PressedReleasedWithoutDraggedApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
StackPane stackPane = new StackPane();
stackPane.setPrefSize(800, 600);
stage.setScene(new Scene(stackPane));
stage.show();
Observable<MouseEvent> mousePressedObservable = JavaFxObservable.eventsOf(stackPane, MouseEvent.MOUSE_PRESSED);
Observable<MouseEvent> mouseReleasedObservable = JavaFxObservable.eventsOf(stackPane, MouseEvent.MOUSE_RELEASED);
Observable<MouseEvent> mouseDraggedObservable = JavaFxObservable.eventsOf(stackPane, MouseEvent.MOUSE_DRAGGED);
mousePressedObservable
.switchMap(mousePressed -> mouseReleasedObservable.takeUntil(mouseDraggedObservable))
.subscribe(next -> System.out.println("PRESSED'N'RELEASED without DRAGGED"));
}
}

Przemek Krysztofiak
- 906
- 5
- 15