如何禁用 JavaFX 中的触摸事件

How do I disable touch events in JavaFX

我的 JavaFX 应用程序在 Windows 8 个触摸事件方面存在问题。出于某种原因,当用户在某些情况下触摸应用程序 window 时,我会崩溃。我想完全禁用触摸事件并恢复为常规左键单击(我不使用任何花哨的手势)。

如何让 JavaFX 像处理常规鼠标点击一样处理触摸事件?

了解您看到的是哪种崩溃(堆栈跟踪或转储、java 版本等)会很有帮助,因为触摸事件在 Java 中应该可以正常工作 8. 至于您的事件重定向问题你可能想试试这个:

在最顶层节点(例如您的主要阶段)添加一个 TouchEvent.ANY EventFilter 并使用它(这将在冒泡到其目标之前消耗所有触摸事件),使用后您可以将事件转发为一个新的 MouseEvent(例如 MouseClick)。请参阅此示例:

import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TouchEvent;
import javafx.scene.input.TouchPoint;


primaryStage.addEventFilter(TouchEvent.ANY, new EventHandler<TouchEvent>() {
            @Override
            public void handle(TouchEvent event) {
                // Consume the touch event
                event.consume();

                // Create a fake MouseEvent (MOUSE_CLICKED) for the current touch event
                TouchPoint touchPoint = event.getTouchPoint();
                int clickCount = 1;
                MouseEvent mouseEvent = new MouseEvent(event.getSource(), event.getTarget(),
                        MouseEvent.MOUSE_CLICKED, touchPoint.getX(), touchPoint.getY(), touchPoint
                                .getScreenX(), touchPoint.getScreenY(), MouseButton.PRIMARY,
                        clickCount, false, false, false, false, true, false, false, true, false,
                        false, null);

                // Fire the fake event
                Scene yourScene = primaryStage.getScene();
                Event.fireEvent(yourScene.getRoot(), mouseEvent);
            }
});

您可能希望向代码添加一些额外的 checks/logic 以便能够发送基于 TouchEvent 类型的不同 MouseEvent。但是,我建议在尝试类似的操作之前尝试找出当前崩溃的根本原因。

希望对您有所帮助!