comment atteindre javafx événement de souris "pousser et tenir"?


Je développe un projet JavaFX et j'ai besoin de quelque chose de similaire à un TouchEvent qui caractérise un événement "push and hold" . Mais Il devrait être mappé comme un MouseEvent parce que j'ai des problèmes avec les événements tactiles sur Linux. Par exemple, dans Ubuntu, il ne répondra pas aux événements tactiles.

Veuillez me faire savoir si vous avez des idées sur la façon de déclencher un MouseEvent chaque fois qu'un "push and hold" se produit sur Linux?

Author: Teocci, 2014-09-01

1 answers

Utilisez simplement un PauseTransition comme minuterie pour le "hold". Démarrer si la souris est enfoncé, l'arrêter si il est relâché ou traîné.

import javafx.animation.PauseTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class MousePressAndHoldTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        Pane root = new Pane();

        addPressAndHoldHandler(root, Duration.seconds(1), 
                event -> System.out.println("Press and hold"));


        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }

    private void addPressAndHoldHandler(Node node, Duration holdTime, 
            EventHandler<MouseEvent> handler) {

        class Wrapper<T> { T content ; }
        Wrapper<MouseEvent> eventWrapper = new Wrapper<>();

        PauseTransition holdTimer = new PauseTransition(holdTime);
        holdTimer.setOnFinished(event -> handler.handle(eventWrapper.content));


        node.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
            eventWrapper.content = event ;
            holdTimer.playFromStart();
        });
        node.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> holdTimer.stop());
        node.addEventHandler(MouseEvent.DRAG_DETECTED, event -> holdTimer.stop());
    }


    public static void main(String[] args) {
        launch(args);
    }
}
 6
Author: James_D, 2014-09-01 19:01:09