2016-05-04 18 views
7

C'è un modo per utilizzare gli eventi tattili JavaFX in un'applicazione mobile? Attualmente sto usando un JFXPanel per catturare gli eventi JavaFX, tuttavia quando provo ad ottenere gli eventi non sto ricevendo alcun evento touch e solo eventi mouse. Questo è testato su un touch screen Dell di Windows 8.1.Utilizzare solo gli eventi tattili JavaFX nell'applicazione Swing

Aggiornamento: Il seguente codice rappresenta lo scheletro di ciò che sto utilizzando per ottenere gli eventi. Questo JFXPanel viene utilizzato come un vetro nell'applicazione Swing. Questo crea un JFXPanel per il vetro, che è in grado di catturare tutti gli eventi.

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

introdurci al codice un po ', ma che stai dicendo non è possibile ricevere tocco eventi dal livello di scena? – Elltz

+0

@Elltz sì, hai ragione dicendo che non posso ricevere eventi di tocco dal livello di scena. Ho aggiornato la domanda con un po 'più di informazioni. L'ho spogliato senza nascondere il problema. Fatemi sapere se volete i dettagli – Nick

risposta

3

This question on the FX mailing list suggerisce che non è possibile utilizzare il metodo che hai preso, invece è necessario creare un palcoscenico JavaFX e incorporare l'applicazione swing utilizzando SwingNode (Oscillazione in FX) al posto di JFXPanel (FX in Swing).

io non ho alcun hardware tocco permesso di provare questo, ma mi aspetto che la segue a lavorare ...

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

Grazie per la risposta, purtroppo, non è possibile (molto più come una tonnellata di lavoro) portare/incorporare il programma all'interno di uno stage JavaFX. Accetterò la risposta se si scopre che questo è l'unico modo. – Nick

+0

@Nicholas Esiste un altro approccio che ho intrapreso un progetto alcuni anni fa, utilizzare l'API JNI e Win32 per registrare gli eventi tattili e poi passarli a Java, non consiglierei questo approccio perché JNI è piuttosto sgradevole, ma lo ha fatto lavoro, questo era prima che JavaFX aggiungesse il supporto del touch-screen ... Hai bisogno di supportare tutte le piattaforme (Linux, Mac ecc.) o solo Windows? – Adam

+0

Grazie per il suggerimento, lo esaminerò. Solo finestre in questa fase – Nick

Problemi correlati