도전2022
Javafx creating animated texts 본문
http://www.javaworld.com/article/2074530/core-java/javafx-2--simultaneous-animated-text-strings.html
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javafxapplication2;
import javafx.animation.ParallelTransition;
import javafx.animation.PathTransition;
import javafx.animation.PathTransition.OrientationType;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Glow;
import javafx.scene.effect.Reflection;
import javafx.scene.paint.Color;
import javafx.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Shape;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author dh
*/
public class JavaFXApplication2 extends Application {
/**
* Generate Path upon which animation will occur.
*
* @return Generated path.
*/
private Path generateCurvyPath()
{
final Path path = new Path();
path.getElements().add(new MoveTo(70,20));
path.getElements().add(new CubicCurveTo(430, 0, 430, 120, 250, 120));
path.getElements().add(new CubicCurveTo(50, 120, 50, 240, 430, 240));
path.setOpacity(0.0);
return path;
}
/**
* Generate the path transition.
*
* @param shape Shape to travel along path.
* @param path Path to be traveled upon.
* @param duration Duration of single animation.
* @param delay Delay before beginning first animation.
* @param orientation Orientation of shape during animation.
* @return PathTransition.
*/
private PathTransition generatePathTransition(
final Shape shape, final Path path,
final Duration duration, final Duration delay,
final OrientationType orientation)
{
final PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(duration);
pathTransition.setDelay(delay);
pathTransition.setPath(path);
pathTransition.setNode(shape);
pathTransition.setOrientation(orientation);
pathTransition.setCycleCount(Timeline.INDEFINITE);
pathTransition.setAutoReverse(true);
return pathTransition;
}
/**
* Generate RMOUG text string with appropriate fill, font, and effect.
*
* @return "RMOUG" text string with fill, font, and effect.
*/
private Text generateRmougText()
{
return TextBuilder.create().text("RMOUG").x(20).y(20).fill(Color.DARKGRAY)
.font(Font.font(java.awt.Font.SERIF, 75))
.effect(new Glow(0.25)).build();
}
/**
* Generate "Training Days 2012" text string with appropriate position, fill,
* and font.
*
* @return "Training Days 2012" with specified font, fill, and position.
*/
private Text generateTrainingDaysText()
{
return TextBuilder.create().text("Training Days 2012")
.x(380).y(240).fill(Color.DARKOLIVEGREEN)
.font(Font.font(java.awt.Font.SERIF, 50)).build();
}
/**
* Location String with specifed effect, font, and position.
*
* @return Location String with specified effect, font, and position.
*/
private Text generateDenverText()
{
final Reflection reflection = new Reflection();
reflection.setFraction(1.0);
return TextBuilder.create()
.text("Denver, Colorado").x(20).y(20)
.font(Font.font(java.awt.Font.SANS_SERIF, 25))
.effect(reflection)
.build();
}
/**
* Apply animation.
*
* @param group Group to which animation is to be applied.
*/
private void applyAnimation(final Group group)
{
final Path path = generateCurvyPath();
group.getChildren().add(path);
final Shape rmoug = generateRmougText();
group.getChildren().add(rmoug);
final Shape td = generateTrainingDaysText();
group.getChildren().add(td);
final Shape denver = generateDenverText();
group.getChildren().add(denver);
final PathTransition rmougTransition =
generatePathTransition(
rmoug, path, Duration.seconds(8.0), Duration.seconds(0.5),
OrientationType.NONE);
final PathTransition tdTransition =
generatePathTransition(
td, path, Duration.seconds(5.5), Duration.seconds(0.1),
OrientationType.NONE);
final PathTransition denverTransition =
generatePathTransition(
denver, path, Duration.seconds(30), Duration.seconds(3),
OrientationType.ORTHOGONAL_TO_TANGENT);
final ParallelTransition parallelTransition =
new ParallelTransition(rmougTransition, tdTransition, denverTransition);
parallelTransition.play();
}
/**
* JavaFX Application starting method.
*
* @param stage Primary stage.
* @throws Exception Potential JavaFX application exception.
*/
@Override
public void start(Stage stage) throws Exception
{
final Group rootGroup = new Group();
final Scene scene = new Scene(rootGroup, 500, 400, Color.GHOSTWHITE);
stage.setScene(scene);
stage.setTitle("JavaFX 2 RMOUG Training Days 2012 Animations");
stage.show();
applyAnimation(rootGroup);
}
/**
* Main function for running JavaFX animation demo.
*
* @param arguments Command-line arguments; none expected.
*/
public static void main(final String[] arguments)
{
Application.launch(arguments);
}
}
'소스코드' 카테고리의 다른 글
Killer Game Programming in Java (0) | 2014.07.10 |
---|---|
javafx 2 documentation (0) | 2014.07.09 |
Netbeans Download : All Package (0) | 2014.07.04 |
Analog Clock in C# WPF using Rotation(아날로그 시계) (0) | 2014.06.17 |
RadioButton tooltip (0) | 2014.05.30 |