仅在Swing应用程序中使用JavaFX触摸事件

有没有办法在swing应用程序中使用 JavaFX触摸事件?目前我正在使用JFXPanel来捕获JavaFX事件,但是当我尝试获取事件时,我不会接收任何触摸事件而只接收鼠标事件.这是在Windows 8.1 Dell触摸屏上测试的.

更新:下面的代码是我用来获取事件的框架.此JFXPanel用作Swing应用程序中的glasspane.这将为glasspane创建一个JFXPanel,它可以捕获所有事件.

public class MouseEventRouter extends JFXPanel {
    ...

    public ZeusMouseEventRouter(JMenuBar menuBar,Container contentPane) {
        ...
        this._contentPane = contentPane;
        this._contentPane.add(_JFXpanel);
        this._contentPane.setVisible(true);
        init();
    }

    private void init() {
        pane = new VBox();
        pane.setAlignment(Pos.CENTER);
        Platform.runLater(this::createScene);
    }

    private void createScene() {
        Scene scene = new Scene(pane);
        ...

        scene.setonTouchpressed(new EventHandler<javafx.scene.input.TouchEvent>() {
            @Override public void handle(javafx.scene.input.TouchEvent event) {
                System.out.println("tap down detected");
            }
        });

        ...
        setScene(scene);
    }
}

解决方法

This question on the FX mailing list表示不可能使用你所采用的方法,而是你需要创建一个JavaFX阶段并使用SwingNode(Swing in FX)而不是JFXPanel(Swing中的FX)嵌入你的Swing应用程序.

我没有任何支持触控的硬件来测试这个,但我希望以下工作……

public class TouchApp extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        JPanel swingContent = new JPanel();
        swingContent.add(new JButton("Hello world"));
        swingContent.add(new JScrollBar());

        borderpane content = new borderpane();
        SwingNode swingNode = new SwingNode();
        swingNode.setContent(swingContent);
        content.setCenter(swingNode);
        Scene scene = new Scene(content);
        scene.setonTouchpressed((e) -> {
            System.out.println(e);
        });
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...