我正在开发JavaFX项目,并且需要类似于TouchEvent表征 “按下并按住”事件的东西 。但是应该将其映射为一个,MouseEvent因为我在Linux上的触摸事件遇到了麻烦。例如,在Ubuntu中,它不会响应触摸事件。
TouchEvent
MouseEvent
请让我知道,如果你对如何触发一个任何想法MouseEvent 每当 “按住” 在Linux上出现?
只需将a PauseTransition用作“保持”的计时器即可。如果按下鼠标,则将其启动;如果释放或拖动,则将其停止。
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); } }