2013 年の JavaFX Advent Calendar の5日目のエントリーです。
前日は skrb さんでした!!
明日は HASUNUMA Kenji さんです。
TreeViewを操作するユーザにとっては、アイテムの編集・追加・削除、Drag and Dropによるコピーや移動はごく当たり前にできると思うかもしれません。でも、JavaFXのTreeViewにはもともとこれらの機能が備わっていないので、プログラマが自前でゴリゴリ作る必要があります。
TreeViewといっても大きく分けて4種類の部品があって、下図はMVCパターンで表現したものです。
TreeViewとTreeItemはJavaFXのをそのまま使うとして、背景色が黄色のものはプログラマが作る必要があります。
TreeViewコントローラはビューとモデルを制御するもので、ゼロから作ります。TreeCellはJavaFXにありますが、アイテムの編集やDrag and Drop操作をサポートしたければ派生クラスを作ります。「データ」はアプリケーションに必要な情報を保持するだけでなく、TreeCellの見せ方にも関与します。
たとえば、Windowsのエクスプローラのようなファイラでは、TreeViewはフォルダごとにアイコンとフォルダ名が表示されていますね。となると、「データ」には少なくともアイコンとフォルダ名に関する何らかの情報を持っている必要がある、、、というふうに設計するんでしょうね。
以上をふまえ、TreeViewで「アイテムの編集ができる」ようにカスタマイズする方法について、4回に分けて記事を書きましたのでご紹介します。
(Drag and Drop操作については、またあとで紹介できたらいいなと思っています)
- JavaFX TreeViewのカスタマイズ - その1:TreeItemのデータクラスの作成
- JavaFX TreeViewのカスタマイズ - その2:TreeCellの作成
- JavaFX TreeViewのカスタマイズ - その3:TreeCell用Graphicの作成
- JavaFX TreeViewのカスタマイズ - その4:TreeViewコントローラの作成
GitHubにもソースコードを上げてあります。Java 8のJava FXで動作確認済みです。