[英]Use only JavaFX touch events in Swing Application
有沒有辦法在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);
}
}
FX郵件列表上的這個問題表明你不可能使用你所采用的方法,而是你需要創建一個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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.