Com a mudança da linguagem na versão 2.0 este operador foi alterado para um tipo especial de dado. Porém de grande versatilidade.
Como dito no título do post, vamos vê-lo na prática. Abaixo temos uma aplicação que demonstrará algumas de suas aplicações.
public class Properties extends Application {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Application.launch(Properties.class, args);
}
private Rectangle rect1;
private Rectangle rect2;
private Rectangle rect3;
private TextBox edit1;
private TextBox edit2;
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.LIGHTGREEN);
Button btn = new Button();
btn.setLayoutX(40);
btn.setLayoutY(130);
btn.setText("Rectangles");
btn.setOnAction(new EventHandler() {
public void handle(ActionEvent event) {
TranslateTransition tt = new TranslateTransition(Duration.valueOf(3000),rect1);
RotateTransition rt = new RotateTransition(Duration.valueOf(3000), rect1);
tt.toXProperty().set(600);
tt.toYProperty().set(500);
tt.cycleCountProperty().set(3);
rt.cycleCountProperty().set(3);
rt.setToAngle(720);
tt.autoReverseProperty().set(true);
tt.play();
rt.play();
}
});
Button btn1 = new Button();
btn1.setLayoutX(40);
btn1.setLayoutY(150);
btn1.setText("edits");
btn1.setOnAction(new EventHandler() {
public void handle(ActionEvent event) {
edit1.setLayoutX(100);
edit1.setLayoutY(200);
edit2.textProperty().bindBidirectional(edit1.textProperty());
}
});
rect1 = new Rectangle(100,100);
rect2 = new Rectangle(100,100);
rect3 = new Rectangle(200,150,100,100);
rect2.translateXProperty().bind(rect1.translateXProperty().add(rect1.widthProperty()).add(20));
rect2.layoutYProperty().bind(rect1.layoutYProperty());
rect2.rotateProperty().bind(rect1.rotateProperty().divide(2));
rect3.rotateProperty().bind(rect1.rotateProperty().multiply(2));
edit1 = new TextBox("edit1");
edit2 = new TextBox();
edit2.layoutXProperty().bind(edit1.layoutXProperty());
edit2.layoutYProperty().bind(edit1.layoutYProperty().add(edit1.heightProperty()).add(10));
root.getChildren().addAll(rect1,rect2,rect3,edit1,edit2);
root.getChildren().addAll(btn,btn1);
primaryStage.setScene(scene);
primaryStage.setVisible(true);
}
}
A aplicação coloca na janela três retangulos. O primeiro deles (rect1) receber alterações de posicionamento e rotação através de Transition's (mais sobre eles em ).
O segundo retângulo terá suas propriedades translateX, translateY e rotation acompanhando as propriedades do objeto rect1. A propriedade translateY será companhada diretamente, já a translateX somará também a largura do objeto rect1, mantendo sempre a mesma distância entre os dois retângulos. Já a propriedade rotation do objeto rect2 acompanhará a mesma propriedade do objeto rect1, mas numa razão da metade de sua "velocidade".
Ao contrário, o objeto rect3 acompanhará a rotação do objeto rect1, porém com o dobro de sua "velocidade".
Já os objetos edit1 e edit2 passará a acompanhar o propriedade text um do outro, através de um "bindBidirectional". Assim com um único método acrescentamos a capacidade de acompanhamentos bidirecionais, onde as alterações feitas em uma propriedade refletem diretamente em outra e vice-versa.
São exemplos simples mas demonstram a capacidade e potencialidade das classes que implementa a interface Property.
Até mais,
Nenhum comentário:
Postar um comentário