JFXtras Core 入門 - Shape (最終回)

前回までに JFXtras のシェイプについて5回書いてきましたが、今回は締めということで(特に締めに相応しい話ではありませんが)まとめと言うか、気付いたことを書いてみます。

JFXtras Core 入門 - Shape (1) - Foo am I? の中で矢印の図形を描きました。
矢印を描きたいとき、JFXtras ならば Arrow というクラスがあるので、それを使うことで簡単に矢印を描くことが出来るという話でした。


Arrow で矢印を描画


で、何に気付いたのかと。
この矢印は右を向いています。「右に行くと何かありますよ」なんて知らせたい場合に使えます。
では今度は左に向かせたいです。プログラムを直そうと思い API ドキュメントを探してみましたが JFXtras の Arrow には direction: Direction のようなプロパティは存在しません。
一体どうすれば良いのでしょうか。弱りました。使えないジャーン!と一瞬思ったりもしました。


ノンノン!そんな心配は要りません。


そもそも JavaFX の Node クラスがとても便利な Tlanslate, Scale, Rotate といった三種の神器を持っているのです。そして全てのシェイプは Node を継承しているので Arrow クラス自体には方向を指定するプロパティなんて必要ないのです。
三種の神器のうち Rotate がノードを回転させるので、これを使って向きを変えることが出来ます。


Node の rotate を使って向きを変えます。

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import org.jfxtras.scene.shape.Arrow;

Stage {
    title: "JFXtras Shape Arrow"
    width: 150
    height: 150
    scene: Scene {
        content: [
            Arrow {
                x: 10, y: 20
                width: 100
                height: 60
                rise: 0.5
                depth: 0.5
                fill: Color.GREEN
                rotate: 90
            }
        ]
    }
}


はい、このとおり!


rotate: 180


rotate: 270


他のシェイプも同様です。

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import org.jfxtras.scene.shape.RoundPin;

Stage {
    title: "JFXtras Shape RoundPin"
    width: 150
    height: 150
    scene: Scene {
        content: [
            RoundPin {
                centerX: 60
                centerY: 40
                radius: 30
                height: 70
                fill: Color.STEELBLUE
                rotate: 180
            }
        ]
    }
}


JavaFX ではこのように回転させたり、残る二つの神器を使って移動させたりサイズを拡大縮小させたりなんて余裕で出来ちゃう訳なんですね。便利だなあ。


とまあ、全然まとめ的な話ではありませんでしたが、以上で JFXtras Core 入門 - Shape は終わりです。
次回からは Border をやる予定です。(が、気が変わるかもしれません)


最後におまけ

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import org.jfxtras.scene.shape.Star2;
import javafx.animation.Timeline;

import javafx.animation.KeyFrame;

def star: Star2 = Star2 {
    centerX: 60
    centerY: 60
    outerRadius: 20
    innerRadius: 10
    count: 5
    fill: Color.YELLOW
}

Timeline {
    repeatCount: Timeline.INDEFINITE
    keyFrames: [
        KeyFrame {
            time: 0.1s
            action: function() {
                star.rotate+=1;
            }
        }
    ]
}.play();

Stage {
    title: "JFXtras Shape Star2"
    width: 150
    height: 150
    scene: Scene {
        content: [
            star
        ]
        fill: Color.DARKBLUE
    }
}



おまけのアプレット