JavaFX

2013-09-03 17 views
21

के साथ कहीं भी माउस ईवेंट को संभालें मेरे पास जावाएफएक्स एप्लीकेशन है, और मैं दृश्य के भीतर कहीं भी माउस क्लिक के लिए इवेंट हैंडलर जोड़ना चाहता हूं। निम्नलिखित दृष्टिकोण ठीक काम करता है, लेकिन जिस तरह से मैं चाहता हूं बिल्कुल ठीक नहीं। यहाँ समस्या को वर्णन करने के एक नमूना है:JavaFX

public void start(Stage primaryStage) { 
    root = new AnchorPane(); 
    scene = new Scene(root,500,200); 
    scene.setOnMousePressed(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      System.out.println("mouse click detected! "+event.getSource()); 
     } 
    }); 

    Button button = new Button("click here"); 
    root.getChildren().add(button); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

अगर मैं खाली जगह में कहीं भी क्लिक करें, EventHandler invokes handle() विधि है, लेकिन अगर मैं button क्लिक करें, handle() विधि लागू नहीं है। मेरे आवेदन में कई बटन और अन्य इंटरैक्टिव तत्व हैं, इसलिए मुझे उन तत्वों पर क्लिक पकड़ने के लिए एक दृष्टिकोण की आवश्यकता है, साथ ही प्रत्येक तत्व के लिए मैन्युअल रूप से नया हैंडलर जोड़ने के बिना।

उत्तर

36

आप addEventFilter() के साथ दृश्य में एक ईवेंट फ़िल्टर जोड़ सकते हैं। किसी भी बच्चे के नियंत्रण से घटना का उपभोग करने से पहले इसे बुलाया जाएगा। इवेंट फ़िल्टर के लिए कोड कैसा दिखता है यहां बताया गया है।

scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() { 
    @Override 
    public void handle(MouseEvent mouseEvent) { 
     System.out.println("mouse click detected! " + mouseEvent.getSource()); 
    } 
}); 
+1

यह पूरी तरह से काम करता है! मैं अभी भी javafx के लिए नया हूँ, तो बहुत बहुत धन्यवाद –