JFXtras Core 入門 - Shape (1)

JFXtras Core 入門ということでこれから書いていこうと思いますが、第一回目は Shape (シェイプ)です。
JFXtras のバージョンは 0.5 を使います。

shape とは、英和辞典で引いてみると、形、形状、輪郭などと書かれており、何らかの図形と解釈しておけば良いと思います。
JavaFX には標準で javafx.scene.shape パッケージがあり、その中には抽象基底クラスの Shape クラスと、それを継承した Line、Arc、Circle、Ellipse、Rectangle、Polygon などのサブクラスがあるので、JFXtras を使わなくても図形を描画することができます。
ただ、JavaFX 標準のクラスは汎用的なクラスの為、少し複雑な形を描こうとすると、ほんのちょっと面倒なこともあります。(そうは言っても JavaFX 標準の機能だけでも他の言語、他のプラットフォームよりも簡単になっていると思います)
例えば、矢印を JavaFX 標準の機能で極力簡単に描こうとすると、以下のようになります。
JavaFX の Shape は Node のサブクラスの為、シーングラフに追加して構成することができます。

import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Rectangle;
...
Stage {
    title: "JavaFX Arrow"
    width: 150
    height: 120
    scene: Scene {
        content: [
            Rectangle {
                x: 10, y: 20
                width: 50, height: 30
                fill: Color.GREEN
                stroke: Color.BLACK
            }
            Polygon {
                points : [ 60,5, 115,30, 60,65 ]
                fill: Color.GREEN
                stroke: Color.BLACK
            }
        ]
    }
}


上の例は、Rectangle (矩形)と Polygon (多角形)を組み合わせて、矢印を描いています。手抜きの為、二つのシェイプの境界の黒い線が残ってしまっています。


org.jfxtras.scene.shape.Arrow


これはとても簡単ですが、JFXtras のシェイプを使うことでもう少し簡単に描くことができます。
JFXtras にはよく使われそうなシェイプがあらかじめ定義されていて、矢印も定義されています。Arrow クラスです。
以下は JFXtras の Arrow の例です。

import javafx.scene.paint.Color;
import org.jfxtras.scene.shape.Arrow;

Stage {
    title: "JFXtras 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
            }
        ]
    }
}


簡単になりましたね。


Arrow が持つ説明が欲しそうな変数は rise と depth ですね。
rise は 0.0 から 1.0 までの値で、矢印のアローヘッド(矢尻)の幅に対するシャフト(棒)の部分の太さで、0.0 ではシャフトが線状になり、1.0 ではシャフトの太さがアローヘッドの幅と同じになります。
rise: 1.0

depth も 0.0 から 1.0 までの値で、アローヘッドの高さに対するシャフトの長さで、0.0 ではシャフトが無くなって、1.0 ではシャフトが右端一杯まで伸びて、その分アローヘッドは潰れて線状になります。
depth: 0.9

http://jfxtras.googlecode.com/svn/site/javadoc/release-0.5/org.jfxtras.scene.shape/org.jfxtras.scene.shape.Arrow.html


次回からは残りのシェイプを数個ずつ纏めて紹介していきたいと思います。