ついにベールを脱いだJavaFX

第1回 JavaFXの概要と基本

この記事を読むのに必要な時間:およそ 7 分

置換トリガ

置換トリガは変数もしくはアトリビュートが変更された時に,決められた処理を行うために使用します。この置換トリガもJava BeansでPropertyChangeEventが発生した場合のイベント処理 と同じように考えることができます。

置換トリガは変数もしくはアトリビュートの定義時に設定することができ,定義の後にon replaceを付加して処理を記述します。

リスト13

var value: String on replace oldValue {
     println("\nValue has changed!");
     println("Old Value: {oldValue}");
     println("New Value: {value}");
};
 
value = "JavaFX";
value = "JavaFX Script";

oldValueには変更する前の値が代入されます。oldValueは省略可能です。では,このコードを実行してみましょう。

図8

Value has changed!
Old Value: 
New Value: 
 
Value has changed!
Old Value: 
New Value: JavaFX
 
Value has changed!
Old Value: JavaFX
New Value: JavaFX Script

上記の例では変数valueを定義しただけで初期化を行っていません。そのため,値がnullとして置換トリガが呼び出されます。もちろん,定義と共に初期化を行うこともできます。

リスト14

var value: String = "Java" on replace oldValue {
     println("\nValue has changed!");
     println("Old Value: {oldValue}");
     println("New Value: {value}");
};
 
value = "JavaFX";
value = "JavaFX Script";

この場合,on replace の前に変数に値を代入します。これを実行すると次のようになります。

図9

Value has changed!
Old Value: 
New Value: Java
 
Value has changed!
Old Value: Java
New Value: JavaFX
 
Value has changed!
Old Value: JavaFX
New Value: JavaFX Script

時間間隔のサポート

JavaFXではアニメーションが多用されるため,時間を扱うことが重要になります。そこで,言語レベルで時間間隔を表すことができます。時間間隔はDuration型で表されます。

リスト15

var duration1: Duration = 10ms; // 10ミリ秒
var duration2: Duration = 1s; // 1秒
var duration3: Duration = 1m; // 1分
 
println("{duration1} * 100 == {duration2}? {duration1* 100 == duration2}");

数字の後にmsが続けばミリ秒,sが続けば秒というように解釈されます。

duration1は10ミリ秒なので,100倍すれば1秒になるはずです。では,最後の式を実行するとどうなるでしょう?

図10

10ms * 100 == 1000ms? true

当然のことながら,trueになりました。また,duration2が1000msと表記されていることから,内部的にはミリ秒で保持されていることがわかります。

次回では,このような特徴を持つJavaFX Scriptを用いて,実際にアプリケーションを作ってみましょう。

著者プロフィール

櫻庭祐一(さくらばゆういち)

横河電機に勤務するかたわらJava in the Boxにて新しい技術を追い続けています。JavaOneは今年で11年目。名実共にJavaOneフリークと化しています。