2016-05-04 10 views
7

में केवल जावाफ़ैक्स स्पर्श ईवेंट का उपयोग करें स्विंग एप्लिकेशन में JavaFX स्पर्श ईवेंट का उपयोग करने का कोई तरीका है? वर्तमान में मैं JavaFX घटनाओं को कैप्चर करने के लिए एक जेएफएक्स पैनेल का उपयोग कर रहा हूं, हालांकि जब मैं घटनाओं को प्राप्त करने का प्रयास करता हूं तो मुझे किसी भी टच इवेंट और केवल माउस ईवेंट प्राप्त नहीं होते हैं। यह विंडोज 8.1 डेल टच स्क्रीन पर परीक्षण किया जाता है।स्विंग एप्लिकेशन

अपडेटेडः नीचे दिया गया कोड घटनाओं को प्राप्त करने के लिए मैं जो उपयोग कर रहा हूं उसका कंकाल है। स्विंग एप्लिकेशन में यह जेएफएक्सपैनल ग्लासपेन के रूप में प्रयोग किया जाता है। यह ग्लासपैन के लिए एक जेएफएक्स पैनेल बनाता है, जो सभी घटनाओं को पकड़ने में सक्षम है।

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

एक छोटे से अपने कोड के लिए हमें परिचय है, लेकिन आप कह रहे हैं आप संपर्क प्राप्त नहीं कर सकते दृश्य स्तर से घटनाओं? – Elltz

+0

@Elltz हाँ आप कहकर सही हैं कि मैं दृश्य स्तर से स्पर्श घटनाएं प्राप्त नहीं कर सकता हूं। मैंने थोड़ा और जानकारी के साथ सवाल अपडेट किया है। मैंने इसे छिपाने की उम्मीद के बिना इसे नीचे छीन लिया। यदि आप विवरण चाहते हैं तो मुझे बताएं – Nick

उत्तर

3

This question on the FX mailing list यह दृष्टिकोण आपके द्वारा उठाए गए का उपयोग कर संभव नहीं है पता चलता है, बजाय आप एक JavaFX मंच बना सकते हैं और SwingNode (में विदेशी मुद्रा स्विंग) का उपयोग कर अपने घुमाओ आवेदन एम्बेड करने के लिए की आवश्यकता होगी बजाय JFXPanel की (स्विंग में FX)।

मैं किसी भी टच सक्षम हार्डवेयर यह परीक्षण करने के लिए नहीं है, लेकिन मैं काम करने के लिए निम्न की अपेक्षा ...

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

उत्तर के लिए धन्यवाद, दुर्भाग्यवश, जावाफ़ैक्स चरण के अंदर प्रोग्राम को पोर्ट/एम्बेड करने के लिए यह संभव नहीं है (काम के एक टन की तरह)। अगर यह पता चला कि यह एकमात्र तरीका है तो मैं जवाब स्वीकार करूंगा। – Nick

+0

@ निकोलस एक और तरीका है जिसे मैंने कुछ साल पहले एक परियोजना पर लिया था, जेएनआई और विन 32 एपीआई का उपयोग टच इवेंट्स के लिए पंजीकरण करने के लिए करें और फिर उन्हें जावा के माध्यम से पास करें, मैं इस दृष्टिकोण को जेएनआई के रूप में काफी अप्रिय नहीं मानूंगा, लेकिन ऐसा हुआ काम, यह जावाएफएक्स ने टच-स्क्रीन समर्थन जोड़ा था ... क्या आपको सभी प्लेटफ़ॉर्म (लिनक्स, मैक इत्यादि) या सिर्फ विंडोज़ का समर्थन करने की आवश्यकता है? – Adam

+0

सुझाव के लिए धन्यवाद, मैं इसे देख लूंगा। इस चरण में बस खिड़कियां – Nick

संबंधित मुद्दे