Friday, March 2, 2012

JavaFX 2.0: Implement setOnFinished() to handle end of Transition


package JavaFX_UI;

import javafx.animation.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
 *
 * @web http://java-buddy.blogspot.com/
 */
public class JavaFX_ImageTransition extends Application {
/**
     * @param args the command line arguments
     */
public static void main(String[] args) {
launch(args);
}

Scene scene;
TranslateTransition transitionForward, transitionBackward;

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("http://java-buddy.blogspot.com/");
StackPane root = new StackPane();
scene = new Scene(root, 300, 250);

VBox vBox = new VBox();
vBox.setSpacing(3);

final Image image1 = new Image(getClass().getResourceAsStream("duke_44x80.png"));
final ImageView imageView = new ImageView();
imageView.setImage(image1);

transitionForward = createTransitionForward(imageView);
transitionBackward = createTransitionBackward(imageView);

Button btnStart = new Button();
btnStart.setText("Start");
btnStart.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
transitionForward.play();
}
});

Button btnStop = new Button();
btnStop.setText("Stop");
btnStop.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
transitionForward.stop();
transitionBackward.stop();
}
});

vBox.getChildren().add(imageView);
vBox.getChildren().add(btnStart);
vBox.getChildren().add(btnStop);

root.getChildren().add(vBox);
primaryStage.setScene(scene);
primaryStage.show();
}

TranslateTransition createTransitionForward(final ImageView iv){
TranslateTransition transition = TranslateTransitionBuilder.create()
.node(iv)
.fromX(0)
.toX(scene.widthProperty().doubleValue() - iv.getImage().getWidth())
.fromY(0)
.toY(scene.heightProperty().doubleValue() - iv.getImage().getHeight())
.duration(Duration.millis(1000))
.interpolator(Interpolator.LINEAR)
.cycleCount(1)
.build();

transition.setOnFinished(new EventHandler<ActionEvent>(){

@Override
public void handle(ActionEvent arg0) {
transitionBackward.play();
}
});

return transition;
}

TranslateTransition createTransitionBackward(final ImageView iv){
TranslateTransition transition = TranslateTransitionBuilder.create()
.node(iv)
.fromX(scene.widthProperty().doubleValue() - iv.getImage().getWidth())
.toX(0)
.fromY(scene.heightProperty().doubleValue() - iv.getImage().getHeight())
.toY(0)
.duration(Duration.millis(1000))
.interpolator(Interpolator.LINEAR)
.cycleCount(1)
.build();

transition.setOnFinished(new EventHandler<ActionEvent>(){

@Override
public void handle(ActionEvent arg0) {
transitionForward.play();
}
});

return transition;
}
}


No comments:

Post a Comment