Para ver el uso que tiene Timeline para hacer animaciones en la versión compilada de JavaFX (ya se ha dejado de utilizar dur) miro el ejemplo que aparece en una entrada del Wiki de JavaFX.
De este código, una vez visto correr, se pueden inferir reglas interesantes. El código del script es el siguiente:
import javafx.ext.swing.*;
import javafx.scene.geometry.*;
import javafx.scene.paint.*;
import javafx.animation.*;
import java.lang.System;
var x = 0;
var t = Timeline { // Utilizo Timeline como un objeto al que le aplicaré
repeatCount: 3 // los métodos start() y stop(). Interesante atributos
autoReverse: true // repeatCount y autoReverse
// Únicamente modifico el valor de x que es accesible
// dentro del script. Es a este valor al que se hace
// referencia con un bind del atributo animable
// La estructura general de Timeline es metódica
keyFrames: [KeyFrame{time : 0s
values: x => 0},
KeyFrame{time : 2s
values: x => 400 tween Interpolator.LINEAR}
]//keyFrames
}//Timeline;
SwingFrame {
closeAction: function(): Void {System.exit(0);}
title : 'Animation: Simple'
background : Color.WHITE;
width : 550
visible : true
content: BorderPanel{
top: Canvas {content:
Rectangle {x : bind x
y : 0
width : 100
height: 100
fill : Color.BLUE
}
}//Canvas
bottom: FlowPanel{content: [ // La versión de compilación de la que
// dispongo no utiliza SwingButton sino
// Button (igualmente tiene atributo action)
Button{text : "Start"
action: function(): Void{t.start();}},
Button{text : "Pause"
action: function(): Void{t.pause();}},
Button{text : "Resume"
action: function(): Void{t.resume();}},
Button{text : "Stop"
action: function(): Void{t.stop();}}
]}//FlowPanel
}//BorderPanel
}//SwingFrame
La animación siempre hace uso de la función especial (de JavaFX, también la he visto en Swing) bind. Esta tiene la propiedad de actualizar automáticamente el valor del atributo al que se le asocia cuando cambia el valor de una variable y es ésta variable primera la que cambia con el tiempo con el objeto Timeline.
El tema con el sizeof me mola.
JavaFX permite hacer comparaciones de cadenas con el operador lógico "==" que se utiliza para comprobar igualdad entre cualquier tipo de variables. Esto es una diferencia con el lenguaje Java que necesita del método .equals().