アトリビュート

12/10 に JavaFX ではオブジェクト生成のときにアトリビュートを指定すると書きました。ところで、このアトリビュートにはどんなものがあるのでしょう?

Frame クラスなど、Swing で対応するクラスがある場合、だいたい Swing のプロパティに対応するアトリビュートがあるようです。

だいたいじゃ困る、というのならば API ドキュメントを見るのが一番。

JavaFX Script はまだちゃんと API ドキュメントの形式が決まっていないのですが、とりあえずここにあります。

https://openjfx.dev.java.net/nonav/api/index.html

しかし、このドキュメント見にくいよなぁ...

どんなアトリビュートがあるのか分かったところで、もう一度 Hello, World! のスクリプトを見てみましょう。

上記のドキュメントにはアトリビュートは abc 順で書いてありますが、Hello, World! のスクリプトは abc 順にアトリビュートが書いてありません。

ということは、アトリビュートはどんな順番で書いてもいいということです。

試しに、アトリビュートの順番を変えて実行してみましょう。

import javafx.ui.*;

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

    content: Label {
        text: "Hello, World!"
    }
}
import javafx.ui.*;

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

    visible: true

    title: "Hello, World"
    height: 100
    width: 250
}

実行してみると... やっぱり同じになります ^^;;

ところで、アトリビュートの指定の行末にはセミコロンがないと気づきましたか?

そうなんです、アトリビュートの指定にはセミコロンが必要ないのです。Java を普段書いていると、ついついセミコロンを書いてしまうのですが、JavaFX Script では不要です。

セミコロンが必要なところもあるのですが、それはまた今度。

それにしても、セミコロンが必要な箇所と不必要な箇所があると、とても間違えやすい。必要でないところで、ついセミコロンを書いてしまいます。まぁ、慣れの問題なんですけどね。

では、複数のアトリビュートを 1 行に書きたい場合はどうするか分かりますか。Java だとセミコロンで区切って、複数の処理を 1 行に書けますが、それと同じことをアトリビュート指定でもしたいのです。

答えはカンマで区切る、です。

だから、上記の Hello, World! スクリプトは次のようにも書くことができます。

import javafx.ui.*;

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

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