A interface WritableValue fornece o método setValue() para um Property. A interface ReadOnlyProperty injeta dois métodos para um Property: um método getBean() que retorna o titular de property e um método getName() que retorna um nome descritivo da property.
Ambos os métodos podem retornar null se o property não é parte de um grande objeto ou se um nome descritivo não é importante.
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package sample; import javafx.animation.*; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.util.Duration; import main.java.br.com.cursojavanow.AnimationString; public class Main extends Application { @Override public void start(Stage stage) throws Exception { Scene scene = new Scene(new View(), 300,150); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } class View extends Group { public View() { Text text = new Text(50,50,""); String str = "あいうえおあいうえおあいうえお\nかきくけこかきくけこかきくけこ"; AnimationString.Value asv = new AnimationString.Value(str); AnimationString as = new AnimationString(text.textProperty()); KeyValue kv = new KeyValue(as, asv); KeyFrame kf = new KeyFrame(Duration.seconds(3), kv); Timeline animation = new Timeline(kf); animation.setCycleCount(2); animation.setAutoReverse(true); animation.play(); getChildren().add(text); } } } |
AnimationString.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package main.java.br.com.cursojavanow; import javafx.animation.Interpolatable; import javafx.beans.property.StringProperty; import javafx.beans.value.WritableValue; public class AnimationString implements WritableValue<AnimationString.Value> { private StringProperty prop; private Value value; public AnimationString(StringProperty prop) { this.prop = prop; value = new Value(prop.getValue()); } @Override public Value getValue() { return value; } @Override public void setValue(Value value) { prop.setValue(value.text); this.value = value; } public static class Value implements Interpolatable<Value> { private String text; public Value(String text) { this.text = text; } @Override public Value interpolate(Value endValue, double t) { String s = endValue.text; int len = s.length() + 1; int result = Math.min(s.length(),(int) (t * len)); if ( result != text.length() ) { return new Value(s.substring(0, result)); } return this; } } } |
Fonte: https://nompor.com/2018/01/08/post-2385/
Fonte: The Definitive Guide to Modern Java Clients with JavaFX
Deixe um comentário