TITLE:JavaFX Script でアイコンのアニメーション
#navi(../)
*JavaFX Script でアイコンのアニメーション [#k5f150de]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-05-18~
更新日:&lastmod;

#contents

**概要 [#ka6e16c6]
JavaFX ScriptでFireFox風のAnimated Icon を作成します。

//#screenshot

**サンプルコード [#sdbe46e7]
#code{{
import javafx.ui.*;
import javafx.ui.canvas.*;

public class Timer {
    private attribute rotationValue: Number;
    public attribute running: Boolean;
}
attribute Timer.rotationValue = bind if running
then [0,45..360] dur 1040 linear
while running
continue if true
else 0;

class CircleRtation extends CompositeNode {
    public attribute animating: Boolean;
    attribute radius: Number;
    attribute fill: Color;
}
attribute CircleRtation.radius = 6;
attribute CircleRtation.fill = green;

operation CircleRtation.composeNode() {
    var r = 2*radius;
    var c = 2*r+5; //2>(sqrt(2)+0.5), margin=5+r*(1.5-sqrt(2))
    var t = Timer {running: bind animating};
    return Group {
      transform: bind [rotate(t.rotationValue, c, c), translate(c, c)]
      content: [foreach (i in [1..8]) Circle {
        radius: this.radius,
        fill: bind fill,
        opacity: 0.1*i,
        transform: [translate(-r, -r), rotate(i*45, r, r)]
      }, Circle {
        fill: Color{ opacity: 0 }
        radius: r
        onMousePressed:  operation(e:CanvasMouseEvent) { t.running = false; }
        onMouseReleased: operation(e:CanvasMouseEvent) { t.running = true; }
        onMouseEntered:  operation(e:CanvasMouseEvent) { fill = red; }
        onMouseExited :  operation(e:CanvasMouseEvent) { fill = green; }
      }]
    };
}
var cr = CircleRtation{ animating: true };
Frame {
  title  : "JavaFX - Icon Animation"
  width  : 320
  height : 120
  content: Canvas { content: cr }
  centerOnScreen: true
  visible: true
  onClose: operation() {
      //System.exit(0);
      cr.animating = false;
  }
};
}}
//-&jnlp;
//-&jar;
//-&zip;

**解説 [#f26b3d04]
 [#q9ec8847]
モデルがDefaultTableModelを継承しているなら、setRowCount(0)ですべての行を削除することができます。この場合、モデルを作り直している訳ではないので、カラムの幅などは削除する前と同じ値を保っています。

DefaultTableModelを継承していない場合は、モデルに以下の要領((詳細はDefaultTableModel.javaのソースを参照してください。))で行を全削除するメソッドを実装します。
#code{{
public void clear() {
  //以下のdataVectorは実装に合わせて変更してください
  int size = dataVector.size();
  dataVector.clear();
  fireTableRowsDeleted(0, size-1);
  //fireTableDataChanged();
}
}}

**参考リンク [#c6663f28]
-[https://openjfx.dev.java.net/servlets/ReadMsg?listName=users&msgNo=90:title=Simple example of a clock]
-[http://jfx.wikia.com/wiki/Animation_Syntax:title=Animation Syntax - Planet JFX - a Wikia wiki]

**コメント [#xf9978dd]
#comment