Invalidation listeners tem um método simples que você subscreve com expressões lambda. Vamos utilizar sem o método lambda. Quando você clicar no StackPane, o clique do mouse vai rotacionar o StackPane.
O segundo objeto Text irá mostrar o status da animação da RotationTransition, que apenas manipula a propriedade de status de leitura. Você verá RUNNING, PAUSED ou STOPPED.
O código ficará assim:
package sample;
import javafx.animation.Animation;
import javafx.animation.Interpolator;
import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.value.ObservableObjectValue;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.effect.Reflection;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
Ellipse ellipse = new Ellipse(110, 70);
ellipse.setFill(Color.LIGHTBLUE);
Text text = new Text("Minhas Formas");
text.setFont(new Font("Arial Bold", 24));
Reflection r = new Reflection();
r.setFraction(.8);
r.setTopOffset(1.0);
text.setEffect(r);
StackPane stackPane = new StackPane();
// Define RotateTransition
RotateTransition rotate = new RotateTransition(
Duration.millis(2500), stackPane);
rotate.setToAngle(360);
rotate.setFromAngle(0);
rotate.setInterpolator(Interpolator.LINEAR);
// configure mouse click handler
stackPane.setOnMouseClicked(mouseEvent -> {
if (rotate.getStatus().equals(Animation.Status.RUNNING)) {
rotate.pause();
} else {
rotate.play();
}
});
stackPane.getChildren().addAll(ellipse, text);
Text text2 = new Text("");
text2.setFont(new Font("Arial Bold", 24));
rotate.statusProperty().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
text2.setText("Animation status: " +
((ObservableObjectValue<Animation.Status>)observable)
.getValue());
}
});
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.getChildren().addAll(stackPane, text2);
Scene scene = new Scene(vBox, 350, 330, Color.LIGHTYELLOW);
stage.setTitle("Minhas Formas com JavaFX");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}

Vamos modificar o código e utilizar o método lambda. Substitua o código comentado pelo o que está utilizando o método lambda.

Exemplos para javafx.beans.InvalidationListener.
Fonte: The Definitive Guide to Modern Java Clients with JavaFX





Deixe um comentário