有没有办法在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();
- }
- }