2016-05-04 38 views
7

スイングアプリケーションでJavaFXタッチイベントを使用する方法はありますか?現在、JFXPanelを使用してJavaFXイベントをキャプチャしていますが、イベントを取得しようとすると、タッチイベントとマウスイベントのみが受信されません。これは、Windows 8.1のDellタッチスクリーンでテストされています。SwingアプリケーションでJavaFXタッチイベントのみを使用する

更新日:以下のコードは、私がイベントを取得するために使用しているスケルトンです。このJFXPanelは、Swingアプリケーションのガラスパネルとして使用されます。これにより、すべてのイベントをキャプチャできる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); 
    } 
} 
+0

少しあなたのコードに私たちを紹介していますが、タッチを受けることができないと言っていますシーンレベルからのイベント? – Elltz

+0

@Elltzはい、私はシーンレベルからタッチイベントを受け取ることができないと言って正しいです。もう少し詳しい情報で質問を更新しました。私はうまくいけば問題を隠すことなく、それを取り除いた。詳細を知りたい場合は教えてください – Nick

答えて

3

This question on the FX mailing list代わりに使用すると、JavaFXの段階を作成する必要があり、その代わりにJFXPanelのSwingNode(FXでのSwing)を使用してSwingアプリケーションを埋め込むよ、それはあなたが撮影したアプローチを使用しては不可能であることを示唆している(スイングでFX )。

私はこれをテストするために任意のタッチ対応ハードウェアを持っていませんでしたが、私は次のように動作することを期待し

...

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(); 
    } 
} 
+0

答えを教えていただきありがとうございます。残念ながら、JavaFXステージ内にプログラムを移植/埋め込むことはできません。これが唯一の方法だとわかったら、私は答えを受け入れます。 – Nick

+0

@Nicholas何年か前にプロジェクトに取り組んだもう一つのアプローチがあります.JNIとWin32 APIを使ってタッチイベントに登録し、Javaに渡す方法がありますが、このアプローチをJNIとしてはかなり不愉快ですが、これは、JavaFXがタッチスクリーンサポートを追加する前です。すべてのプラットフォーム(Linux、Macなど)をサポートする必要がありますか? – Adam

+0

提案をありがとう、私はそれを調べます。この段階の窓 – Nick

関連する問題