Javafx 简明教程

JavaFX - Parallel Transition

正如我们之前了解的,JavaFX 允许你在节点上应用多个转换。这可以通过一次应用一个转换(称为顺序转换)或一次应用多个转换(称为并行转换)来完成。

并行转换顾名思义,它一次在一个对象上应用多个转换。例如,应用这些转换的 JavaFX 节点可以在从一个地方移动到另一个地方时增长。这可以通过一起应用缩放和平移转换来实现。

让我们在这章详细了解并行转换。

Parallel Transition

ParallelTransition 类用于在 JavaFX 节点上并行播放多个转换。此类属于 javafx.animation 包。应用于节点上的所有转换都是此类的子转换,此类继承了节点属性;如果未指定节点属性。

Example

下面是演示 JavaFX 中并行转换的程序。将此代码保存在名为 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 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls parallelTransitionExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls parallelTransitionExample

执行后,上述程序会生成如下所示的 JavaFX 窗口。

parallel transition