JavaFX - 如何检查鼠标是否已进入和/或退出窗格?
JavaFX - How to check if mouse is has entered and or exited a Pane?
我在 Javafx 中有一个窗格,它希望在鼠标进入其边界时进行动画处理,并且我希望动画在鼠标离开该窗格后停止。我知道这需要倾听者,但我找到的所有答案似乎都只关注 java.awt
您可以使用方法 Node.setOnMouseEntered()
and 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
}
}
或者您可以使用 *.fxml 文件链和您的控制器 class:
- 将两个事件
onMouseEntered="#onMouseInto" onMouseExited="#onMouseOut"
添加到您的 fxml 文件到窗格字符串中,使其像
<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">
- 将方法事件添加到控制器中class。例如,我将更改窗格的背景颜色,但您可以确定地做任何您想做的事;)
@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");
}
我在 Javafx 中有一个窗格,它希望在鼠标进入其边界时进行动画处理,并且我希望动画在鼠标离开该窗格后停止。我知道这需要倾听者,但我找到的所有答案似乎都只关注 java.awt
您可以使用方法 Node.setOnMouseEntered()
and 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
}
}
或者您可以使用 *.fxml 文件链和您的控制器 class:
- 将两个事件
onMouseEntered="#onMouseInto" onMouseExited="#onMouseOut"
添加到您的 fxml 文件到窗格字符串中,使其像
<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">
- 将方法事件添加到控制器中class。例如,我将更改窗格的背景颜色,但您可以确定地做任何您想做的事;)
@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");
}