JavaFX - 如何检查鼠标是否已进入和/或退出窗格?

问题描述 投票:1回答:2

我在Javafx中有一个窗格,想要在鼠标进入其边界时动画,并且我希望在鼠标退出窗格后动画停止。我理解这需要一个监听器,但我发现的所有答案似乎只涉及java.awt

java javafx mouseevent listener mouselistener
2个回答
5
投票

您可以使用方法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
投票

或者您可以使用* .fxml文件链和您的控制器类来创建它:

  1. 将你的fxml文件添加到Pane字符串中的两个事件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">
  1. 将方法事件添加到控制器类中。例如,我将更改窗格的背景颜色,但您可以做任何您想要的事情;)
    @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");
    }
© www.soinside.com 2019 - 2024. All rights reserved.