2016-05-04 12 views
7

Swing uygulamasında JavaFX dokunma olaylarını kullanmanın bir yolu var mı? Şu anda JavaFX olaylarını yakalamak için bir JFXPanel kullanıyorum, ancak olayları anlamaya çalıştığımda herhangi bir dokunma olayını ve yalnızca fare olaylarını almıyorum. Bu, Windows 8.1 Dell Dokunmatik Ekranında test edilmiştir.Swing Uygulamasında yalnızca JavaFX dokunma olaylarını kullanın

Güncelleme: Aşağıdaki kod, olayları almak için kullandığım şeyin iskeletidir. Bu JFXPanel Swing uygulamasında bir campane olarak kullanılır. Bu, tüm olayları yakalayabilen cam parçası için bir JFXPanel oluşturur.

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

biraz kodunuzu bize tanıtmak, ama sen dokunma alamaz diyorsun sahne seviyesinden olaylar? – Elltz

+0

@Elltz evet sahne olayından dokunma olayları alamıyorum diyerek haklısınız. Soruyu biraz daha fazla bilgi ile güncelledim. Umarım problemi saklamıyormuş gibi düşürdüm. Eğer detaylar – Nick

cevap

3

This question on the FX mailing list yerine bir JavaFX sahne oluşturmak ve SwingNode (FX Salıncak) kullanarak Salıncak uygulamayı gömmek için Swing yerine JFXPanel arasında (FX gerekir, bu Çektiğiniz yaklaşım kullanarak mümkün değildir anlaşılacağı).

Bunu test etmek için herhangi bir dokunmatik özellikli donanım yok, ama ben şu çalışmasını bekliyoruz

...

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

istiyorsanız bana bildirin Cevabınız için teşekkür ederiz, maalesef, bir JavaFX sahne içinde programı port/embed için mümkün değildir (bir ton gibi). Cevabını kabul edersem, bunun tek yolu buysa. – Nick

+0

@Nicholas Birkaç yıl önce bir projeyi gerçekleştirdiğim başka bir yaklaşım var, JNI ve Win32 API'sini dokunmatik olaylara kaydolmak ve daha sonra bunları Java'ya aktarmak için kullanıyorum, bu yaklaşımı JNI olarak oldukça hoş görmüyorum, ama iş, bu JavaFX dokunmatik ekran desteği eklemeden önce oldu ... Tüm platformları (Linux, Mac vs?) veya sadece Windows desteklemeniz gerekiyor mu? – Adam

+0

Öneriniz için teşekkür ederim. Sadece bu aşamada pencereler – Nick