Javafx 简明教程
JavaFX - Parallel Transition
正如我们之前了解的,JavaFX 允许你在节点上应用多个转换。这可以通过一次应用一个转换(称为顺序转换)或一次应用多个转换(称为并行转换)来完成。
As we learned previously, JavaFX allows you to apply multiple transitions on a node. This can be done by applying one transition at a time (called sequential transitions) or applying multiple transitions at a time (called parallel transitions).
并行转换顾名思义,它一次在一个对象上应用多个转换。例如,应用这些转换的 JavaFX 节点可以在从一个地方移动到另一个地方时增长。这可以通过一起应用缩放和平移转换来实现。
Parallel transitions, like its name suggests, applies more than one transition on a single object at one parallelly. For instance, the JavaFX node on which these transitions are applied, can grow in size while moving from one place to another. This can be achieved by applying Scale and Translate transitions together.
让我们在这章详细了解并行转换。
Let us learn more about parallel transitions elaborately in this chapter.
Parallel Transition
ParallelTransition 类用于在 JavaFX 节点上并行播放多个转换。此类属于 javafx.animation 包。应用于节点上的所有转换都是此类的子转换,此类继承了节点属性;如果未指定节点属性。
ParallelTransition class is used to play multiple transitions parallelly on a JavaFX node. This class belongs to the javafx.animation package. All the transitions applied on the node are child transitions of this class that inherit its node property; if their node property is not specified.
Example
下面是演示 JavaFX 中并行转换的程序。将此代码保存在名为 parallelTransitionExample.java 的文件中。
Following is the program which demonstrates Parallel Transition in JavaFX. Save this code in a file with the name parallelTransitionExample.java.
import javafx.animation.ParallelTransition;
import javafx.animation.PathTransition;
import javafx.animation.ScaleTransition;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class parallelTransitionExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Rectangle
Rectangle rectangle = new Rectangle();
//Setting the position of the rectangle
rectangle.setX(75.0f);
rectangle.setY(75.0f);
//Setting the width of the rectangle
rectangle.setWidth(100.0f);
//Setting the height of the rectangle
rectangle.setHeight(100.0f);
//setting the color of the rectangle
rectangle.setFill(Color.BLUEVIOLET);
//Instantiating the path class
Path path = new Path();
//Creating the MoveTo path element
MoveTo moveTo = new MoveTo(100, 150);
//Creating the Cubic curve path element
CubicCurveTo cubicCurveTo = new CubicCurveTo(400, 40, 175, 250, 500, 150);
//Adding the path elements to Observable list of the Path class
path.getElements().add(moveTo);
path.getElements().add(cubicCurveTo);
//Creating Path Transition
PathTransition pathTransition = new PathTransition();
//Setting the duration of the transition
pathTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
pathTransition.setNode(rectangle);
//Setting the path for the transition
pathTransition.setPath(path);
//Setting the orientation of the path
pathTransition.setOrientation(
PathTransition.OrientationType.ORTHOGONAL_TO_TAN GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(5);
//Setting auto reverse value to false
pathTransition.setAutoReverse(false);
//Playing the animation
pathTransition.play();
//Creating Translate Transition
TranslateTransition translateTransition = new TranslateTransition();
//Setting the duration for the transition
translateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
translateTransition.setNode(rectangle);
//Setting the axis and length of the transition
translateTransition.setByX(300);
//Setting the cycle count of the transition
translateTransition.setCycleCount(5);
//Setting auto reverse value to false
translateTransition.setAutoReverse(false);
//Creating scale Transition
ScaleTransition scaleTransition = new ScaleTransition();
//Setting the duration for the transition
translateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
translateTransition.setNode(rectangle);
//Setting the dimensions for scaling
scaleTransition.setByY(1.5);
scaleTransition.setByX(1.5);
//Setting the cycle count for the translation
scaleTransition.setCycleCount(5);
//Setting auto reverse value to true
scaleTransition.setAutoReverse(false);
//Applying parallel Translation to the circle
ParallelTransition parallelTransition = new ParallelTransition(
rectangle, pathTransition, translateTransition, scaleTransition );
//Playing the animation
parallelTransition.play();
//Creating a Group object
Group root = new Group(rectangle);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Parallel Transition example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
使用以下命令,从命令提示符编译并执行已保存的 java 文件。
Compile and execute the saved java file from the command prompt using the following commands.
javac --module-path %PATH_TO_FX% --add-modules javafx.controls parallelTransitionExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls parallelTransitionExample
执行后,上述程序会生成如下所示的 JavaFX 窗口。
On executing, the above program generates a JavaFX window as shown below.