insert, deleteはトリガーと組み合わせることもできる。これにより、配列に要素が追加/削除されたときの処理を別ブロックで記述することができる。リスト4-7は買い物カートに商品を入れたり、取り消したりする操作を行う際に、カート内の商品の合計金額を計算するなどに応用した例だが、ほかにもさまざまな利用例が考えられるだろう。
リスト4-7 カートに購入する商品を入れて合計を計算
// カート
class Cart {
attribute tempTotal : Number;
attribute items : Item*;
}
// 商品
class Item {
attribute name : String;
attribute price : Number;
function toString() : String;
}
function Item.toString() : String {
return "{name} {price format as <<###,###>>}円";
}
// トリガー(合計金額の計算と記録)
trigger on insert item into Cart.items {
tempTotal += item.price;
println( "購入 : {item.toString()} | 合計 {tempTotal format as <<###,###>>}円" );
}
trigger on delete item from Cart.items {
tempTotal -= item.price;
println( "取消 : {item.toString()} | 合計 {tempTotal format as <<###,###>>}円" );
}
trigger on Cart.items[old] = value {
tempTotal = tempTotal + value.price - old.price;
println( "変更前 : {old.toString()}" );
println( "変更後 : {value.toString()} | 合計 {tempTotal format as <<###,###>>}円" );
}
// カートに商品を入れてみる
var items = [
// ..... Itemの配列 .....
];
var c = new <>();
insert items[0] into c.items;
insert items[2] into c.items;
delete c.items[1];
c.items[0] = items[1];
insert items[3] into c.items;
実行例
購入 : 音楽プレーヤー 15,000円 | 合計 15,000円
購入 : メモリーカード 5,000円 | 合計 20,000円
取消 : メモリーカード 5,000円 | 合計 15,000円
変更前 : 音楽プレーヤー 15,000円
変更後 : ワンセグチューナー 10,000円 | 合計 10,000円
購入 : USBメモリ 3,000円 | 合計 13,000円
4回にわたって説明したとおり、JavaFXはJavaにはないさまざまな構文や演算子が揃っており、Javaとは一味違ったプログラミングが楽しめる。まだ説明しきれていない部分があるのは残念だが、詳細はJavaFXのリファレンスを参照していただきたい。
また、JavaFXコンポーネントのソースコード(%JFX_HOME%\trunk\src\javafx以下の*.fxファイル)には、さまざまなテクニックが盛り込まれているので、こちらも参考にして、真のJavaFXマスターを目指していただきたい。