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

前端之家收集整理的这篇文章主要介绍了仅在Swing应用程序中使用JavaFX触摸事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在swing应用程序中使用 JavaFX触摸事件?目前我正在使用JFXPanel来捕获JavaFX事件,但是当我尝试获取事件时,我不会接收任何触摸事件而只接收鼠标事件.这是在Windows 8.1 Dell触摸屏上测试的.

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

  1. public class MouseEventRouter extends JFXPanel {
  2. ...
  3.  
  4. public ZeusMouseEventRouter(JMenuBar menuBar,Container contentPane) {
  5. ...
  6. this._contentPane = contentPane;
  7. this._contentPane.add(_JFXpanel);
  8. this._contentPane.setVisible(true);
  9. init();
  10. }
  11.  
  12. private void init() {
  13. pane = new VBox();
  14. pane.setAlignment(Pos.CENTER);
  15. Platform.runLater(this::createScene);
  16. }
  17.  
  18. private void createScene() {
  19. Scene scene = new Scene(pane);
  20. ...
  21.  
  22. scene.setOnTouchPressed(new EventHandler<javafx.scene.input.TouchEvent>() {
  23. @Override public void handle(javafx.scene.input.TouchEvent event) {
  24. System.out.println("tap down detected");
  25. }
  26. });
  27.  
  28. ...
  29. setScene(scene);
  30. }
  31. }

解决方法

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

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

  1. public class TouchApp extends Application {
  2.  
  3. public static void main(String[] args) {
  4. launch(args);
  5. }
  6.  
  7. @Override
  8. public void start(Stage primaryStage) throws Exception {
  9. JPanel swingContent = new JPanel();
  10. swingContent.add(new JButton("Hello world"));
  11. swingContent.add(new JScrollBar());
  12.  
  13. BorderPane content = new BorderPane();
  14. SwingNode swingNode = new SwingNode();
  15. swingNode.setContent(swingContent);
  16. content.setCenter(swingNode);
  17. Scene scene = new Scene(content);
  18. scene.setOnTouchPressed((e) -> {
  19. System.out.println(e);
  20. });
  21. primaryStage.setScene(scene);
  22. primaryStage.show();
  23. }
  24. }

猜你在找的Java相关文章