O código da classe FXMLController.java.
1 |
package main.java.br.com.cursojavanow;<br><br>import javafx.animation.Animation;<br>import javafx.animation.Interpolator;<br>import javafx.animation.RotateTransition;<br>import javafx.beans.binding.When;<br>import javafx.fxml.FXML;<br>import javafx.fxml.Initializable;<br>import javafx.scene.input.MouseEvent;<br>import javafx.scene.layout.StackPane;<br>import javafx.scene.paint.Color;<br>import javafx.scene.text.Text;<br>import javafx.util.Duration;<br>import java.net.URL;<br>import java.util.ResourceBundle;<br><br>public class FXMLController implements Initializable {<br> @FXML<br> private StackPane stackPane;<br> @FXML<br> private Text text2;<br> private RotateTransition rotate;<br> @Override<br> public void initialize(URL url, ResourceBundle rb) {<br> rotate = new RotateTransition(Duration.<em>millis</em>(2500), stackPane);<br> rotate.setToAngle(360);<br> rotate.setFromAngle(0);<br> rotate.setInterpolator(Interpolator.<em>LINEAR</em>);<br> rotate.statusProperty().addListener(<br> (observableValue, oldValue, newValue) -> {<br> text2.setText("Was " + oldValue + ", Now " + newValue);<br> });<br> text2.strokeProperty().bind(new When(rotate.statusProperty()<br> .isEqualTo(Animation.Status.<em>RUNNING</em>))<br> .then(Color.<em>GREEN</em>).otherwise(Color.<em>RED</em>));<br> }<br> @FXML<br> private void handleMouseClick(MouseEvent mouseEvent) {<br> if (rotate.getStatus().equals(Animation.Status.<em>RUNNING</em>)) {<br> rotate.pause();<br> } else {<br> rotate.play();<br> }<br> }<br>} |
A classe controller implementa Initializable e sobrescreve o método initialize(), o qual invoca para você o runtime. Importante, o campo privado stackPane e text2 estão anotados com @FXML. A anotação @FXML associadas aos nomes das variáveis na classe controller representa os objetos descritos no arquivo FXML. Não há código na classe controller para criar esses objetos porque o FXMLLoader faz isso por você.
O método initialize() faz três coisas. Primeiro, cria e configura o RotateTransition e aplica aos node stackPane. Segundo, é adicionado um change listener para o estado da propriedade de transição. Terceiro, uma expressão bind para o text2 lança propriedades específicas baseadas em cor no estado de transição da rotação.
A anotação @FXML com handleMouseClick() indica que o arquivo FXML tem a configuração do evento (event handler). Esse mouse clica no evento e inicia e para a animação da transição de rotação.
Fonte: The Definitive Guide to Modern Java Clients with JavaFX
Deixe um comentário