可以使用Nashorn将Javascript中的动画应用到JavaFX对象吗?
我在JavaFX中有一个可以使用Nashorn将Javascript中的动画应用到JavaFX对象吗?,javascript,java,animation,javafx,nashorn,Javascript,Java,Animation,Javafx,Nashorn,我在JavaFX中有一个Text对象,它充当场景的标题 我可以在所述FX对象上调用动画效果(fadeIn,fadeOut),或者在JS中创建动画队列,然后使用Nashorn将其应用于我的FX对象,并在场景中相应地显示效果吗 示例 使文本对象基于定时循环“脉动”。(在JS中创建的自定义动画) 使用JS中的slideDown函数缓慢展开文本元素 您只需在Nashron中使用javascript程序,即可对任何节点设置动画(fadeIn、fadeOut、slideDown、pulstate等),而无
Text
对象,它充当场景的标题
我可以在所述FX对象上调用动画效果(fadeIn
,fadeOut
),或者在JS中创建动画队列,然后使用Nashorn将其应用于我的FX对象,并在场景中相应地显示效果吗
示例
- 使文本对象基于定时循环“脉动”。(在JS中创建的自定义动画)
- 使用JS中的
函数缓慢展开文本元素slideDown
Nashron
中使用javascript
程序,即可对任何节点设置动画(fadeIn、fadeOut、slideDown、pulstate
等),而无需包装javascript
程序
FadeIn
private void fadeIn(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(0);
fadeTransition.setToValue(1);
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 fadeOut(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(1);
fadeTransition.setToValue(0);
fadeTransition.play();
}
向下滑动
private void fadeIn(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(0);
fadeTransition.setToValue(1);
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));
});
}
一个使用这些动画的文本的简单演示
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);
}
}
您可以简单地使用任何节点设置动画(fadeIn、fadeOut、slideDown、pulstate
等),而无需在Nashron
中包装javascript
程序
FadeIn
private void fadeIn(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(0);
fadeTransition.setToValue(1);
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 fadeOut(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(1);
fadeTransition.setToValue(0);
fadeTransition.play();
}
向下滑动
private void fadeIn(Node node) {
FadeTransition fadeTransition = new FadeTransition(
Duration.millis(900),
node
);
fadeTransition.setFromValue(0);
fadeTransition.setToValue(1);
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));
});
}
一个使用这些动画的文本的简单演示
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);
}
}
您可以从Nashorn制作Javafx动画。我将上面的Java代码由Shekkar Raee移植到nashorn。您可以使用nashorn jjs shell工具运行以下脚本
// Usage: jjs -fx textanimation.js
// JavaFX classes used
var BorderPane = Java.type("javafx.scene.layout.BorderPane")
var Button = Java.type("javafx.scene.control.Button")
var Duration = Java.type("javafx.util.Duration")
var FadeTransitionBuilder = Java.type("javafx.animation.FadeTransitionBuilder")
var Scene = Java.type("javafx.scene.Scene")
var Text = Java.type("javafx.scene.text.Text")
var TranslateTransitionBuilder = Java.type("javafx.animation.TranslateTransitionBuilder")
function start(stage) {
//target node
var text = new Text("Title")
//fade-in animation
var fadeIn = new Button("Fade In")
fadeIn.onAction = function(e) {
var fade1 = FadeTransitionBuilder
.create()
.node(text)
.duration(Duration.millis(900))
.fromValue(0)
.toValue(1)
.build()
fade1.play()
}
//fade-out animation
var fadeOut = new Button("Fade Out")
fadeOut.onAction = function(e) {
var fade2 = FadeTransitionBuilder
.create()
.node(text)
.duration(Duration.millis(900))
.fromValue(1)
.toValue(0)
.build()
fade2.play()
}
//slide-down animation
var slideDown = new Button("Slide-Down")
slideDown.onAction = function(event) {
var slide = TranslateTransitionBuilder.create()
.node(text).duration(Duration.millis(900))
.fromY(-400)
.toY(0)
.build()
slide.play()
}
var root = new BorderPane()
root.setCenter(text)
root.setRight(fadeOut)
root.setLeft(fadeIn)
root.setBottom(slideDown)
var scene = new Scene(root, 300, 250)
stage.title = "Animation Demo"
stage.scene = scene
stage.show()
}
您可以从Nashorn制作Javafx动画。我将上面的Java代码由Shekkar Raee移植到nashorn。您可以使用nashorn jjs shell工具运行以下脚本
// Usage: jjs -fx textanimation.js
// JavaFX classes used
var BorderPane = Java.type("javafx.scene.layout.BorderPane")
var Button = Java.type("javafx.scene.control.Button")
var Duration = Java.type("javafx.util.Duration")
var FadeTransitionBuilder = Java.type("javafx.animation.FadeTransitionBuilder")
var Scene = Java.type("javafx.scene.Scene")
var Text = Java.type("javafx.scene.text.Text")
var TranslateTransitionBuilder = Java.type("javafx.animation.TranslateTransitionBuilder")
function start(stage) {
//target node
var text = new Text("Title")
//fade-in animation
var fadeIn = new Button("Fade In")
fadeIn.onAction = function(e) {
var fade1 = FadeTransitionBuilder
.create()
.node(text)
.duration(Duration.millis(900))
.fromValue(0)
.toValue(1)
.build()
fade1.play()
}
//fade-out animation
var fadeOut = new Button("Fade Out")
fadeOut.onAction = function(e) {
var fade2 = FadeTransitionBuilder
.create()
.node(text)
.duration(Duration.millis(900))
.fromValue(1)
.toValue(0)
.build()
fade2.play()
}
//slide-down animation
var slideDown = new Button("Slide-Down")
slideDown.onAction = function(event) {
var slide = TranslateTransitionBuilder.create()
.node(text).duration(Duration.millis(900))
.fromY(-400)
.toY(0)
.build()
slide.play()
}
var root = new BorderPane()
root.setCenter(text)
root.setRight(fadeOut)
root.setLeft(fadeIn)
root.setBottom(slideDown)
var scene = new Scene(root, 300, 250)
stage.title = "Animation Demo"
stage.scene = scene
stage.show()
}
请注意,root.setCenter(text)root.setRight(fadeOut)root.setLeft(fadeOut)root.setBottom(slideDown)可以表示为root.center=text root.right=fadeOut root.left=fadeIn root.bottom=slideDown注意root.setCenter(text)root.setRight(fadeOut)root.setLeft(fadeIn)root.setBottom(slideDown)可以表示为root.center=text root.right=fadeOut root.left=fadeIn root.bottom=slideDown