Hello, World その 2 インスタンシエーション

さて、Hello, World! プログラムが書けたわけですが、このプログラムは何を意味しているのでしょう。

import javafx.ui.*;

Frame {
    title: "Hello, World"
    width: 250
    height: 100
    visible: true

    content: Label {
        text: "Hello, World!"
    }
}

1 行目の import 文は Java と同じです。JavaFX の UI コンポーネント (ウィジェット) は javafx.ui パッケージで定義されています。

次の Frame { ... } が謎ですよね。

これはオブジェクトの生成を行っています。Java で書けば new Frame() と書くのと同じです。で、Frame { ... } の大カッコの中身はプロパティになっています。

プロパティを記述するのは必須ではないので、Frame { } だけで、Frame オブジェクトを生成することができます。ただこれだけだと表示されることはありません。Swing で new JFrame() と書いただけだと表示されないのと同じです。

Swing で表示させるためには作成したオブジェクトに対して、setVisible(true) をコールしますよね。

JFrame frame = JFrame ();
frame.setVisible(true);

それとおなじことを JavaFX ではアトリビュートで表すのです。

Frame {
    visible: true
}

visible: true は visible アトリビュートに true を代入するということを意味しています。

JavaFX のアトリビュートは、いうなれば Java でいうところのコンストラクタの引数と同じようなものと考えることができます。コンストラクタは引数の名前が明示されないので、引数が多いコンストラクタだと引数の意味がわかりにくいですよね。

JavaFX のアトリビュートは名前つきで指定できるので、何に対して値を代入しているのかすぐ分かります。

この状態で実行すると...

f:id:skrb:20071211003219p:image

中身のない、素のフレームが表示されました。