您可以使用javafx.animation 简单地为任何节点设置动画(fadeIn, fadeOut, slideDown, pulsate 等),而无需在Nashron 中包装javascript 程序。
淡入
private void fadeIn(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(0);
fadeTransition.setToValue(1);
fadeTransition.play();
}
淡出
private void fadeOut(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(1);
fadeTransition.setToValue(0);
fadeTransition.play();
}
向下滑动
private void slideDown(Node node) {
TranslateTransition slideDown = new TranslateTransition(
Duration.millis(900),
node
);
slideDown.setFromY(-400);
slideDown.setToY(0);
slideDown.play();
}
脉动
private void pulsate(Node node) {
node.setEffect(new DisplacementMap());
ScaleTransition scaleUp = new ScaleTransition(
Duration.millis(400), node
);
scaleUp.setFromX(1);
scaleUp.setFromY(1);
scaleUp.setToX(1.4);
scaleUp.setToY(1.4);
scaleUp.play();
scaleUp.setOnFinished(su -> {
ScaleTransition scaleDown = new ScaleTransition(
Duration.millis(400), node
);
scaleDown.setFromX(1.4);
scaleDown.setFromY(1.4);
scaleDown.setToX(1);
scaleDown.setToY(1);
scaleDown.play();
scaleDown.setOnFinished(sd -> node.setEffect(null));
});
}
Text 使用这些动画的简单演示,
public class TextAnimationDemo extends Application {
@Override
public void start(Stage primaryStage) {
Scene scene = new Scene(getContent(), 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
private BorderPane getContent() {
Text text = new Text("Title");
Button fadeIn = new Button("Fade In");
fadeIn.setOnAction(e -> fadeIn(text));
Button fadeOut = new Button("Fade Out");
fadeOut.setOnAction(e -> fadeOut(text));
Button slideDown = new Button("Slide-Down");
slideDown.setOnAction(event -> slideDown(text));
BorderPane root = new BorderPane();
root.setCenter(text);
root.setRight(fadeOut);
root.setLeft(fadeIn);
root.setBottom(slideDown);
return root;
}
public static void main(String[] args) {
launch(args);
}
}