TableView + (FXML + コントローラー)

FXMLを使ったTableViewのTutorialがオラクルドキュメントにあります。
Getting Started with FXML
FXMLTableView.zipをダウンロードして試すことができます。
またこちらのTutorialではFXMLは使っていませんがTableViewで編集可能なセルにする方法などがわかります。
13 Table View

そしてこの辺の前知識があるとJames L. WeaverさんのExpressing the UI for Enterprise Applications with JavaFX 2.0 FXMLが面白いです。
NetBeansプロジェクトをダウンロードして試す事も出来ます。
James L. Weaverさんがこのアプリケーションについて詳しく解説しています。この一部を訳してさらに少し解説を追加してみました。

図6:SearchDemoFXMLアプリケーションのダイアグラム

SearchDemoFXMLアプリケーションの分析
図6の左上から説明するとSearchDemo.javaはアプリケーションクラスを拡張しメインメソッドおよびスタートメソッドを含んでいるJavaFXアプリケーションのメインモジュール(Mainクラス)です。
SearchDemoFXMLアプリケーションにおけるメインクラスの役割はMainクラスがFXMLLoader.load()メソッドによってFXMLファイルを読み込み、アプリケーションがシーングラフ情報を得てSceneを表示します。
これは図6左下のアプリケーション実行時の画面で見られるユーザーインターフェースをプロデュースします。
図6の上段中のsearch_demo.fxmlファイルはscene graphのXML表現を含んでいます。
さらにSearchDemoController.javaファイルがコントローラークラスであることを明示します。(のところでhandleSearchActionがハンドラーメソッド。

これはScene BuilderでGUIを作る時に指定できるので結果としてFXMLファイルに反映されます。


図6の下段中のSearchDemoControllerコントローラークラスはsearch_demo.fxmlの中で表現されたUIコンポーネントへの参照を保持しコンポーネントに発生するイベントを扱います。
変わって図6の右側に目を向けますとSearchDemoControllerはiTunesサービスのRESTインターフェースに問い合わせるためにRestFXクラスのメソッドを呼び出します。
RestFXクラスはiTunes RESTサービス(通信端点)と通信するために働きJSONレスポンスを解析するJavaFX 2.xの外部ライブラリーです。
この記事の終わりの方の「See Also」セクションにはREST/FXプロジェクトへのリンクがあります。

Parent root = FXMLLoader.load(getClass().getResource("search_demo.fxml"),
                       ResourceBundle.getBundle("demos/search/search_demo"));

ResourceBundleの中のリソース名にアトリビュートXMLで言うところの属性で名前と値のペア)をマッピングをする

リスト3のコードはsearch_demo.fxml FXMLファイルの断片でResourceBundleで供給されるプロパティファイルの中のリソース名に”インスタンス宣言としてのアトリビュート内の値”(%nameなどの% + リソース名)をマッピングする方法が示されている。
アトリビュートに割り当てられた値”がパーセント文字(%)から始まり("%name"のように)、FXMLLoader.load()によるFXMLファイル呼び出しはResourceBundle.getBundleでプロパティファイル(search_demo.properties)が供給されロケールに特有の値(曲 名など)がリソース名(nameなど)の代わりに使用される。
(search_demo.propertiesファイルのname=曲 名を例にすればFXMLファイルで%nameとすると右辺の曲 名がリソース名の代わりにコラムタイトルとして使われる)

リスト3:リソース名へのアトリビュートマッピングの例

  <TableView fx:id="resultsTableView">
          <fx:define>
             <ResultCellValueFactory fx:id="resultCellValueFactory"/>
          </fx:define>
            <columns>
              <ResultTableColumn 
                  key="itemName" text="%name" prefWidth="170" 
                  cellValueFactory="$resultCellValueFactory"/>
              <ResultTableColumn 
                  key="itemParentName" text="%album" prefWidth="170" 
                  cellValueFactory="$resultCellValueFactory"/>
              <ResultTableColumn 
                  key="artistName" text="%artist" prefWidth="170" 
                  cellValueFactory="$resultCellValueFactory"/>
            </columns>
        </TableView>

search_demo.properties(リソース名 = UI上で表示される文字)

name=曲 名
album=アルバム
artist=アーティスト
preview=プレビュー
searching=サーチ...
aborting=中断...
cancelled=リクエストキャンセル
resultCountFormat=Found %1$d matching items
appTitle=Search Demonstration
search=Search
detail=Detail
titleOrArtist=Title or artist


restfx