有没有办法在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(); } }
原文地址:https://www.jb51.cc/java/128833.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。