Blog
Skip to end of metadata
Go to start of metadata

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:

Javafx forrás
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:

Javafx forrás
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...

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))