JavaFX - Как проверить, была ли мышь вошла или вышла из панели? - PullRequest
1 голос
/ 17 марта 2019

У меня есть панель в Javafx, которую нужно анимировать всякий раз, когда мышь входит в ее границы, и я хочу, чтобы анимация остановилась, как только мышь вышла из панели.Я понимаю, что это требует слушателя, но все ответы, которые я нахожу, касаются только java.awt

Ответы [ 2 ]

5 голосов
/ 17 марта 2019

Вы можете использовать методы Node.setOnMouseEntered() и Node.setOnMouseExited() для регистрации обработчиков событий, которые запускают или останавливают анимацию. Вот простой пример:

public class MainTest extends Application {
    public void start(Stage primaryStage) {
        Pane pane = new Pane();
        pane.setStyle("-fx-background-color: #ff0000");
        pane.setLayoutX(100);
        pane.setLayoutY(100);
        pane.setPrefSize(300,300);
        pane.setOnMouseEntered(event -> startAnimation());
        pane.setOnMouseExited(event -> stopAnimation());

        Scene scene = new Scene(new Pane(pane), 500, 500);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void stopAnimation() {
        System.out.println("stop");
        // do whatever you need to start your animation
    }

    private void startAnimation() {
        System.out.println("start");
        // do whatever you need to stop your animation
    }
}
3 голосов
/ 17 марта 2019

Или вы можете сделать это с помощью цепочки файла * .fxml и класса вашего контроллера:

  1. Добавьте в свой файл fxml в строку панели два события onMouseEntered="#onMouseInto" onMouseExited="#onMouseOut", чтобы сделать его похожим на
<AnchorPane fx:id="rootPane" onMouseEntered="#onMouseInto" onMouseExited="#onMouseOut" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="yourPackage.YourControllerClass">
Добавить события метода в класс контроллера.Например, я буду менять цвет фона моей панели, но вы можете делать все, что захотите;)
    @FXML
    public AnchorPane rootPane;

    public void onMouseInto(MouseEvent mouseEvent) {
        //Your own event when cursor is gonna into the rootPane
        rootPane.setStyle("-fx-background-color: #1F292E");
    }

    public void onMouseOut(MouseEvent mouseEvent) {
        //Your own event when cursor is gonna out the rootPane
        rootPane.setStyle("-fx-background-color: #C792EA");
    }
...