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とすると右辺の曲 名がリソース名の代わりにコラムタイトルとして使われる)
<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