[英]Handle mouse event anywhere with JavaFX
我有一個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
調用handle()
方法,但如果單擊該button
,則不會調用handle()
方法。 我的應用程序中有許多按鈕和其他交互元素,因此我需要一種方法來捕獲這些元素的點擊,而無需為每個元素手動添加新的處理程序。
您可以使用addEventFilter()向場景添加事件過濾器。 這將在任何子控件使用事件之前調用。 以下是事件過濾器的代碼。
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("mouse click detected! " + mouseEvent.getSource());
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.