简体   繁体   中英

How to check is mouse cursor is on the button in Java FX?

I'm new to Java and I'm wondering if it is possible to check if mouse cursor is for example on the button? I mean not getting clicking events but just moving cursor on the button.

I had working code getting click and then printing something, but I want to change it a little and I can't find out why it doesn't work.

public class Main extends Application implements EventHandler<MouseEvent> {

Button button;
Stage window;
Scene scene;

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Where's the button?");
    button.setText("Click me!");
    button.setOnMouseMoved(this);

    StackPane layout = new StackPane();
    layout.getChildren().add(button);

    Scene scene = new Scene(layout, 300,350);
    primaryStage.setScene(scene);
    primaryStage.show();

}


public static void main(String[] args) {
    launch(args);
}

@Override
public void handle(MouseEvent actionEvent) {
    System.out.println("You clicked the button!");
}
}

I have made small code for you. Take a look. It prints in the console "Ho-Ho-Ho-Hovereed!" once you hover over your button.

 @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Hover over me.'");

        btn.hoverProperty().addListener((event)->System.out.println("Ho-Ho-Ho-Hovereeed!"));        

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Mouse manpulation example in JavaFX!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

i guess you can do that with event handler or css, like...

button.setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {                
            System.out.println("Cursor Over Button");
        }
    });

or/with styles (css)

.button:hover{ -fx-background-color: red; }

Each Node provides a hover property to track whether the mouse cursor is hovering over it or not. By using a simple listener, you can detect when the mouse starts and stops hovering:

button.hoverProperty().addListener((observable, oldValue, newValue) -> {
    if (newValue) {
        System.out.println("Hovering...");
    } else {
        System.out.println("Retreating...");
    }
});

With this listener, newValue will always be true if the mouse is currently hovering over the button and change to false when the mouse leaves the area.

There is also a useful check on a Node - isHover() You can use it on MouseEvents to check if the mouse is hovering over the needed node. Such a tip ;)

button.setOnMouseEntered( (event ) -> {
        button.setTranslateX(button.getTranslateX() + 20);
        button.setTranslateY(button.getTranslateY() + 20);

    });`

Replace button.setOnMouseMoved(this); with my code. This will do!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM