10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaFX TreeViewのカスタマイズ - その1:TreeItemのデータクラスの作成

Last updated at Posted at 2013-11-27

TreeViewというウィジェットはJavaFXに限らず、制御が面倒です。TreeViewを操作するユーザにとっては、アイテムの編集、アイテムのDrag and Dropによるコピーや移動、アイテムの追加/削除などの機能は、ごく当たり前です。しかし、もともとTreeViewにはこれらの機能が備わっていないため、プログラマが自前でゴリゴリ作る必要があるのです。

TreeView.gif

TreeViewは、大きく4つの部品で構成します。GUI部品としてのTreeViewとTreeCell、モデルとしてのTreeItemとそのデータです。複数個のTreeItemを親子関係になるようにつなぎ合わせることにより、木構造を表現します。

TreeItemのルート(一番上の親)をTreeViewに渡すと、その木構造に合わせてTreeView上にTreeCellが貼り付けられます。個々のTreeItemにはデータがあり、そのデータのtoString()が返す文字列がTreeCell上でラベルとして表示されます。つまり、TreeCell、TreeItem、データは、1対1対1の関係にあります。

今回はTreeItemに紐付ける汎用的なデータとして、TreeItemDataクラスを作ります。

TreeItemData.java
package jfxtreeview;

/**
 *{@link javafx.scene.control.TreeItem}用のデータです。
 */
public class TreeItemData {
	private final String name;	//名前
	private final Type type;	//種類(グループ/アイテム)

	/**
	 *コンストラクタです。
	 *@param name 名前
	 */
	public TreeItemData(String name) {
		this(name, Type.ITEM);
	}

	/**
	 *コンストラクタです。
	 *@param name 名前
	 *@param type 種類
	 */
	public TreeItemData(String name, Type type) {
		this.name = name;
		this.type = type;
	}

	/**
	 *名前を取得します。
	 *@return 名前
	 */
	public String getName(){
		return this.name;
	}

	/**
	 *種類を取得します。
	 *@return 種類
	 */
	public Type getType(){
		return this.type;
	}

	/**
	 *文字列表現を返します。
	 *{@link #getName()}と同じ文字列を返します。
	 *@see #getName()
	 */
	@Override
	public String toString(){
		return this.getName();
	}

	/**
	 *TreeItemの種類です。
	 */
	public enum Type {
		/**グループです。*/
		GROUP,
		/**アイテムです。*/
		ITEM,
	}
}

TreeItemDataのプロパティは、「名前」と「種類」の2つだけです。また、内部クラスとしてenum型のTypeもあります。

TreeItemDataはtoString()が「名前」を返すようになっていて、それがTreeCell上でラベルとして表示されます。「種類」は、TreeCell上で「フォルダ」と「ファイル」のアイコンを表示させるためにあり、Type.GROUPまたはType.ITEMを指定します。GROUPなら「フォルダ」のアイコン、ITEMなら「ファイル」のアイコンが表示されるようにします。

このTreeItemDataを、TreeItemのsetValue()で設定したりgetValue()で取得したりするわけです。

今回はここまでです。次回はTreeCellについて触れる予定です。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?