如何实现javafx鼠标事件的“按下并按住”?

我正在开发JavaFX项目,并且需要类似于TouchEvent表征 “按下并按住”事件的东西

。但是应该将其映射为一个,MouseEvent因为我在Linux上的触摸事件遇到了麻烦。例如,在Ubuntu中,它不会响应触摸事件。

请让我知道,如果你对如何触发一个任何想法MouseEvent 每当 “按住” 在Linux上出现?

回答:

只需将a PauseTransition用作“保持”的计时器即可。如果按下鼠标,则将其启动;如果释放或拖动,则将其停止。

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);

}

}

以上是 如何实现javafx鼠标事件的“按下并按住”? 的全部内容, 来源链接: utcz.com/qa/424088.html

回到顶部