簡體   English   中英

使用JavaFX在任何地方處理鼠標事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM