gpt4 book ai didi

java - 如何实现javafx鼠标事件 "push and hold"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:47 24 4
gpt4 key购买 nike

我正在开发一个 JavaFX 项目,我需要类似于 TouchEvent 的东西,它表征了一个“按下并保持”事件。但它应该映射为 MouseEvent,因为我在 Linux 上遇到触摸事件问题。例如,在 Ubuntu 中,它不会响应触摸事件。

如果您对如何在 Linux 上发生 “按住” 时触发 MouseEvent 有任何想法,请告诉我?

最佳答案

只需使用 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);
}
}

关于java - 如何实现javafx鼠标事件 "push and hold"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com