Как проверить, находится ли курсор мыши на кнопке в Java FX? - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в Java и мне интересно, можно ли проверить, например, находится ли курсор мыши на кнопке?Я имею в виду не получение событий щелчка, а просто перемещение курсора на кнопку.

У меня был рабочий код, который получал щелчок, а затем что-то печатал, но я хочу немного его изменить и не могу понять, почему это не так.т работы.

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!");
}
}

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Каждый Node предоставляет свойство hover для отслеживания, находится ли курсор мыши над ним или нет.Используя простой приемник, вы можете определить, когда мышь начинает и останавливает зависание:

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

С этим приемником newValue всегда будет true, если мышь в данный момент находится над кнопкой, и изменитедо false, когда мышь покидает область.

0 голосов
/ 04 декабря 2018

Я сделал небольшой код для вас.Взглянуть.Он печатает в консоли "Хо-хо-хо-ховерид!"когда вы наводите курсор на кнопку.

 @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();
    }
0 голосов
/ 04 декабря 2018

Я думаю, вы можете сделать это с помощью обработчика событий или CSS, например ...

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

или / со стилями (CSS)

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

0 голосов
/ 04 декабря 2018
button.setOnMouseEntered( (event ) -> {
        button.setTranslateX(button.getTranslateX() + 20);
        button.setTranslateY(button.getTranslateY() + 20);

    });`

Заменить button.setOnMouseMoved(this); моим кодом.Это подойдет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...