利用JAVAFX的按钮切换两钟动画效果
时间: 2024-05-06 09:17:01 浏览: 7
可以利用JAVAFX的ToggleButton和StackPane来实现切换两种动画效果的功能。
首先,需要创建两种不同的动画效果。这里以平移和旋转为例:
```java
// 创建平移动画
TranslateTransition translate = new TranslateTransition(Duration.seconds(1));
translate.setByX(100);
// 创建旋转动画
RotateTransition rotate = new RotateTransition(Duration.seconds(1));
rotate.setByAngle(360);
```
然后,创建一个StackPane来承载动画效果,同时创建一个ToggleButton:
```java
StackPane root = new StackPane();
ToggleButton toggleButton = new ToggleButton("切换动画");
toggleButton.setSelected(true);
```
接下来,将两种动画效果分别添加到StackPane中:
```java
root.getChildren().addAll(translateNode, rotateNode);
```
最后,通过ToggleButton的selectedProperty()方法来监听切换按钮的状态,根据不同的状态来切换不同的动画效果:
```java
toggleButton.selectedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) {
root.getChildren().setAll(translateNode, rotateNode);
} else {
root.getChildren().setAll(rotateNode, translateNode);
}
});
```
完整的代码示例:
```java
import javafx.animation.RotateTransition;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class AnimationToggle extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 创建平移动画
TranslateTransition translate = new TranslateTransition(Duration.seconds(1));
translate.setByX(100);
// 创建旋转动画
RotateTransition rotate = new RotateTransition(Duration.seconds(1));
rotate.setByAngle(360);
// 创建两个矩形节点
Rectangle translateNode = new Rectangle(50, 50, 50, 50);
translateNode.setStyle("-fx-fill: red;");
Rectangle rotateNode = new Rectangle(150, 50, 50, 50);
rotateNode.setStyle("-fx-fill: blue;");
// 创建根节点和切换按钮
StackPane root = new StackPane();
ToggleButton toggleButton = new ToggleButton("切换动画");
toggleButton.setSelected(true);
// 将节点添加到根节点中
root.getChildren().addAll(translateNode, rotateNode);
// 监听切换按钮的状态,根据状态切换动画效果
toggleButton.selectedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) {
root.getChildren().setAll(translateNode, rotateNode);
} else {
root.getChildren().setAll(rotateNode, translateNode);
}
});
// 创建场景并显示
Scene scene = new Scene(new StackPane(root, toggleButton), 300, 100);
primaryStage.setScene(scene);
primaryStage.show();
// 开始动画
translate.setNode(translateNode);
rotate.setNode(rotateNode);
translate.setAutoReverse(true);
translate.setCycleCount(TranslateTransition.INDEFINITE);
rotate.setAutoReverse(true);
rotate.setCycleCount(RotateTransition.INDEFINITE);
translate.play();
rotate.play();
}
public static void main(String[] args) {
launch(args);
}
}
```
这样,当点击切换按钮时,就可以切换不同的动画效果了。