如何实现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