A JavaFX nyelv bejelentése sokunk fantáziáját megmozgatta, a specifikáció Java programozóknak eddig ismeretlen utasítások tárházát nyitotta meg. Nézzünk ezek közül kettőt, a beágyazott ciklusokat és az animációt könnyítő dur utasítást. Például a szorzótáblát az alábbi kis program szépen prezentálja egy 500x500 pixeles fehér területen:
import java.lang.*; import javafx.ui.*; import javafx.ui.canvas.*; Canvas { height: 500 width: 500 content: foreach (i in [0..9],j in [0..9] ) [ Group { content: [ Text { content: "{(i+1)*(j+1)}" font: Font {face: VERDANA, style: [BOLD], size: 12} transform: translate(10+i*30, 10+j*20) } ] } ] };
Jól látszik, hogy a foreach ciklusban egymásba ágyaztunk két ciklust (i és j változó). Az animációt a duration angol szó rövidítése: a dur parancs hozza létre. Ha egy grafikai elem valamely értékének adunk egy tartományt, majd a dur parancs megad egy időtartamot (ms mértékegységben), akkor a JavaFX grafikai motorja nyit ennek egy végrehajtó szálat, amely az animációt elvégzi. Például csinálunk egy olyan programot, amely egy szöveget elvisz az előző koordinátáiról egy új (véletlenszerű) koordinátára, s maga a szöveg az aktuális koordináta lesz:
import javafx.ui.*; import javafx.ui.canvas.*; import java.lang.Math; class MovingText extends CompositeNode { attribute x: Number; attribute y: Number; operation moveTo(); } function MovingText.composeNode() = Text { content: bind "{x}, {y}" font: Font {face: VERDANA, style: [BOLD], size: 12} transform: translate(bind x, bind y) fill: red onMouseEntered: operation(e:CanvasMouseEvent) { moveTo(); } }; operation MovingText.moveTo() { var xRand=Math.random()*400; var yRand=Math.random()*200; x = [x..xRand] dur 10000; y = [y..yRand] dur 5000; } Canvas { content: MovingText { x: 100 y: 100 } }
A programot megtekintve láthatjuk, hogy az animáció nem lineáris, hanem a két végpont között gyorsuló majd lassuló mozgást jelent, alkalmazkodva a grafikai animációk igényéhez...