2013-09-03 17 views
21

Bir JavaFX uygulamasına sahibim ve sahnenin herhangi bir yerinde bir fare tıklaması için bir olay işleyicisi eklemek istiyorum. Aşağıdaki yaklaşım tamam çalışıyor, ama tam olarak istediğim şekilde değil. İşte sorun göstermek için bir örnek: Ben boş uzayda her yerde tıklarsanızFare olayını JavaFX ile herhangi bir yere taşıyın

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(); 
} 

, EventHandlerhandle() yöntemini çağırır, ama button tıklarsanız, handle() yöntem çağrılır. Uygulamamda birçok düğme ve diğer etkileşimli öğeler var, bu yüzden her bir öğe için el ile yeni bir işleyici eklemek zorunda kalmadan bu öğelerdeki tıklamaları yakalamaya yönelik bir yaklaşıma ihtiyacım var.

cevap

36

Sahneye addEventFilter() ile bir olay filtresi ekleyebilirsiniz. Bu etkinlik, herhangi bir çocuk denetleyicisi tarafından tüketilmeden önce çağrılır. İşte olay filtresinin kodu neye benziyor.

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

Mükemmel çalışır! Ben hala javafx için yeni, çok teşekkürler –

İlgili konular