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:
1 |
package sample;<br><br>import javafx.animation.Animation;<br>import javafx.animation.Interpolator;<br>import javafx.animation.RotateTransition;<br>import javafx.application.Application;<br>import javafx.beans.InvalidationListener;<br>import javafx.beans.Observable;<br>import javafx.beans.value.ObservableObjectValue;<br>import javafx.geometry.Pos;<br>import javafx.scene.Scene;<br>import javafx.scene.effect.Reflection;<br>import javafx.scene.layout.StackPane;<br>import javafx.scene.layout.VBox;<br>import javafx.scene.paint.Color;<br>import javafx.scene.shape.Ellipse;<br>import javafx.scene.text.Font;<br>import javafx.scene.text.Text;<br>import javafx.stage.Stage;<br>import javafx.util.Duration;<br><br>public class Main extends Application {<br><br> @Override<br> public void start(Stage stage) throws Exception {<br> Ellipse ellipse = new Ellipse(110, 70);<br> ellipse.setFill(Color.<em>LIGHTBLUE</em>);<br> Text text = new Text("Minhas Formas");<br> text.setFont(new Font("Arial Bold", 24));<br><br> Reflection r = new Reflection();<br> r.setFraction(.8);<br> r.setTopOffset(1.0);<br> text.setEffect(r);<br><br> StackPane stackPane = new StackPane();<br><br> <em>// Define RotateTransition<br></em><em> </em>RotateTransition rotate = new RotateTransition(<br> Duration.<em>millis</em>(2500), stackPane);<br> rotate.setToAngle(360);<br> rotate.setFromAngle(0);<br> rotate.setInterpolator(Interpolator.<em>LINEAR</em>);<br> <em>// configure mouse click handler<br></em><em> </em>stackPane.setOnMouseClicked(mouseEvent -> {<br> if (rotate.getStatus().equals(Animation.Status.<em>RUNNING</em>)) {<br> rotate.pause();<br> } else {<br> rotate.play();<br> }<br> });<br><br> stackPane.getChildren().addAll(ellipse, text);<br><br><br> Text text2 = new Text("");<br> text2.setFont(new Font("Arial Bold", 24));<br><br> rotate.statusProperty().addListener(new InvalidationListener() {<br> @Override<br> public void invalidated(Observable observable) {<br> text2.setText("Animation status: " +<br> ((ObservableObjectValue<Animation.Status>)observable)<br> .getValue());<br> }<br> });<br><br> VBox vBox = new VBox();<br> vBox.setAlignment(Pos.<em>CENTER</em>);<br> vBox.getChildren().addAll(stackPane, text2);<br><br> Scene scene = new Scene(vBox, 350, 330, Color.<em>LIGHTYELLOW</em>);<br> stage.setTitle("Minhas Formas com JavaFX");<br> stage.setScene(scene);<br> stage.show();<br> }<br><br><br> public static void main(String[] args) {<br> <em>launch</em>(args);<br> }<br>} |
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