カスタムコンポーネントでメニューを作ってみた

世の中はFlexFlash) vs HTML5 vs Silverlightで、JavaFXなんて比較もされていませんが、どのようなRIAライフをお過ごしでしょうか?
さて、今回はグローバルナビゲーションとかタブメニューとかそんなコンポーネントのサンプルです。

いつものようにサンプルはこちらか確認できます。ソースコード類も公開しているので興味のある人はご覧ください。

解説

書式はこんな感じで定義できるようにしました。

var home:NavigationMenuItem;
var company:NavigationMenuItem;
var products:NavigationMenuItem;
var navi = NavigationMenu {
        width: 540, height: 30 // ナビゲーションバーの幅と高さ
        type: NavigationMenu.NAVI_TYPE_TAB // またはNAVI_TYPE_BUTTON
        font: Font { size: 14 }
        items: [ // メニュー
            home = NavigationMenuItem {
                text: "ホーム" // 表示テキスト
//                width: 200  // widthを指定しないと均等割
                action: function() { // クリック時のアクション定義
                    println(home.text);
                }
            }
            company = NavigationMenuItem {
                text: "会社概要"
                action: function() {
                    println(company.text);
                }
            }
            products = NavigationMenuItem {
                text: "製品"
                action: function() {
                    println(products.text);
                }
            }
        ]
};

内部ではNavigationMenu はCustomNodeで作られており、さらにHBoxで複数のボタンを横に並べる構造になっています。
ボタンはナビゲーション用にカスタムボタンを定義し、適当なグラデーションとエフェクトを適用しました。

非常に簡単に独自コンポーネントを作ることが可能で、使い方も宣言的に簡潔に記述できるように作れるのはJavaFXの大きな特徴です。