2013-09-03 61 views
21

Tôi có một ứng dụng JavaFX và tôi muốn thêm một trình xử lý sự kiện cho một cú nhấp chuột ở bất kỳ đâu trong cảnh. Cách tiếp cận sau hoạt động ok, nhưng không chính xác theo cách tôi muốn. Dưới đây là một ví dụ để minh họa cho vấn đề:Xử lý sự kiện chuột ở bất kỳ đâu với 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(); 
} 

Nếu tôi nhấp bất cứ nơi nào trong không gian trống rỗng, các EventHandler gọi phương thức handle(), nhưng nếu tôi nhấp vào button, phương pháp handle() không gọi. Có nhiều nút và các yếu tố tương tác khác trong ứng dụng của tôi, vì vậy tôi cần một cách tiếp cận để nắm bắt các nhấp chuột trên các yếu tố đó mà không phải thêm thủ công một trình xử lý mới cho từng phần tử đơn lẻ.

Trả lời

36

Bạn có thể thêm bộ lọc sự kiện vào cảnh với addEventFilter(). Điều này sẽ được gọi trước khi sự kiện được tiêu thụ bởi bất kỳ điều khiển con nào. Đây là mã cho bộ lọc sự kiện.

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

Nó hoạt động hoàn hảo! Tôi vẫn còn mới với javafx, vì vậy cảm ơn rất nhiều –

Các vấn đề liên quan