変数のつづき
JavaFX では、変数をいろいろなところで定義できます。
import javafx.ui.*; var text:String = "Hello, World!"; Frame { title: "変数のテスト" width: 200 height: 100 visible: true content: Label { text: text } }
Java で考えると、違和感がありますが、クラスの中に変数を定義することもできます。
import javafx.ui.*; Frame { // ここでも定義できるよ! var text:String = "Hello, World!" title: "変数のテスト" width: 200 height: 100 visible: true content: Label { text: text } }
注意しなければいけないのが、セミコロンがいらない ということです。
ここで定義した変数は他のアトリビュートと同じように扱うことができます。
なんか動的にアトリビュートを追加できるような感じですね。でも、オブジェクトを生成するときにしか追加することができないので、動的な追加とはちょっと違います。
そういえば、ここで使用している変数は、そのオブジェクトの中で使用しているオブジェクトにも使うことができます。
なので、Label のテキストとして text 変数が使えるわけですね。
もちろん、次のように Label の中に書くこともできますよ。
import javafx.ui.*; Frame { title: "変数のテスト" width: 200 height: 100 visible: true content: Label { // ここでももちろん OK var text:String = "Hello, World!" text: text } }
でも、次の例はダメです。
import javafx.ui.*; Frame { content: Label { var text:String = "Hello, World!" text: text } title: text // これは NG width: 200 height: 100 visible: true }
実行すると、エラーが出ます
C:\OpenJFX\samples>java -cp ..\lib\*;. net.java.javafx.FXShell Hello file:/C:/OpenJFX/samples/Hello.fx:9: undefined variable text in title: text
つまり、変数を定義しているオブジェクトの外側では参照できないということですね。