gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:45 25 4
gpt4 key购买 nike

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

更新:下面的代码是我用来获取事件的框架。此 JFXPanel 在 Swing 应用程序中用作玻璃面板。这会为玻璃面板创建一个 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(FX 中的 Swing)而不是 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();
}
}

关于java - 在 Swing 应用程序中仅使用 JavaFX 触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017643/

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