T
- TreeItem内のvalue
プロパティのタイプ。public class TreeItem<T> extends Object implements EventTarget
モデルには、アイテムの数、それらの位置または値自体が変更されたときに通知を受けるリスナーを登録できます。ただし、TreeItemはノードではないため、TreeItemでは視覚的なイベントは起動されないことに注意してください。これらのイベントを取得するには、関連するオブザーバをTreeCellインスタンスに追加する必要があります(カスタム・セル・ファクトリを使用 - 詳細は、Cell
クラスのドキュメントを参照)。
最も単純な例として、次のようにメモリーでTreeItemインスタンスを作成できます。
TreeItem<String> root = new TreeItem<String>("Root Node");
root.setExpanded(true);
root.getChildren().addAll(
new TreeItem<String>("Item 1"),
new TreeItem<String>("Item 2"),
new TreeItem<String>("Item 3")
);
TreeView<String> treeView = new TreeView<String>(root);
このアプローチは、ツリー構造が単純である場合や、データが多すぎず、メモリーに容易に入る量である場合に適切に機能します。ツリー構造のサイズが不明である(ため、非常に大きくなる可能性がある)場合は、オンデマンドで、メモリー効率の高い方法でTreeItemインスタンスを作成するオプションがあります。ファイル・システム・ブラウザを作成する、次のコードでこのことを説明します。
private TreeView buildFileSystemBrowser() {
TreeItem<File> root = createNode(new File("/"));
return new TreeView<File>(root);
}
// This method creates a TreeItem to represent the given File. It does this
// by overriding the TreeItem.getChildren() and TreeItem.isLeaf() methods
// anonymously, but this could be better abstracted by creating a
// 'FileTreeItem' subclass of TreeItem. However, this is left as an exercise
// for the reader.
private TreeItem<File> createNode(final File f) {
return new TreeItem<File>(f) {
// We cache whether the File is a leaf or not. A File is a leaf if
// it is not a directory and does not have any files contained within
// it. We cache this as isLeaf() is called often, and doing the
// actual check on File is expensive.
private boolean isLeaf;
// We do the children and leaf testing only once, and then set these
// booleans to false so that we do not check again during this
// run. A more complete implementation may need to handle more
// dynamic file system situations (such as where a folder has files
// added after the TreeView is shown). Again, this is left as an
// exercise for the reader.
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;
@Override public ObservableList<TreeItem<File>> getChildren() {
if (isFirstTimeChildren) {
isFirstTimeChildren = false;
// First getChildren() call, so we actually go off and
// determine the children of the File contained in this TreeItem.
super.getChildren().setAll(buildChildren(this));
}
return super.getChildren();
}
@Override public boolean isLeaf() {
if (isFirstTimeLeaf) {
isFirstTimeLeaf = false;
File f = (File) getValue();
isLeaf = f.isFile();
}
return isLeaf;
}
private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
File f = TreeItem.getValue();
if (f != null && f.isDirectory()) {
File[] files = f.listFiles();
if (files != null) {
ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
for (File childFile : files) {
children.add(createNode(childFile));
}
return children;
}
}
return FXCollections.emptyObservableList();
}
};
}
TreeItem Events
TreeItemでは、シーングラフの他の場所と同じイベント・バブリングの概念をサポートします。これは、すべてのTreeItemのイベントをリスニングする(このことは推奨されません)必要がないことを意味します。かわりにイベント・リスナーをTreeViewのroot
アイテムにアタッチすることは、より適切で、大幅に低コストの解決策となります。イベントが発生する場所とルートTreeItemの間にパスがあるかぎり、イベントはルート・アイテムにバブルされます。
ただし、TreeItemがノードではないこと、つまり、TreeItemで定義されるイベント・タイプのみが配信されることに注意してください。一般イベント(マウス操作など)をリスニングするには、TreeViewに含まれるcells
に(cell factory
を指定して)必要なリスナーを追加する必要があります。
TreeItemクラスでは、階層を定義して、数多くのイベントを定義します。これらを次に示します(各イベント・タイプの詳細は、リンク先を参照)。
TreeItem.treeNotificationEvent()
TreeItem.valueChangedEvent()
TreeItem.graphicChangedEvent()
TreeItem.treeItemCountChangeEvent()
前述のインデントは、イベント・タイプ間の関係を示します。たとえば、すべてのTreeItemのイベント・タイプには、親のイベント・タイプとしてtreeNotificationEvent()
があり、expand
とcollapse
のブランチ・イベント・タイプは両方ともtreeNotificationEvent()
です。パフォーマンス上の理由から、リスニングする必要があるイベントのみをリスニングすることをお薦めします。つまり、たとえば、TreeItem.treeNotificationEvent()
ではなくTreeItem.valueChangedEvent()
をリスニングすることが推奨されます。
Type | プロパティと説明 |
---|---|
BooleanProperty |
expanded
このTreeItemの展開された状態。
|
ObjectProperty<Node> |
graphic
値プロパティの左側に通常表示されるノード。
|
ReadOnlyBooleanProperty |
leaf
TreeItemに子がない場合にtrueであるTreeItemリーフ・プロパティを表します。
|
ReadOnlyObjectProperty<TreeItem<T>> |
parent
このTreeItemの親を表すプロパティ。
|
ObjectProperty<T> |
value
このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ。
|
修飾子と型 | クラスと説明 |
---|---|
static class |
TreeItem.TreeModificationEvent<T>
TreeItemの変更のすべての形式に関する関連情報を含む
Event 。 |
コンストラクタと説明 |
---|
TreeItem()
空のTreeItemを作成します。
|
TreeItem(T value)
指定されたオブジェクトに設定された値プロパティでTreeItemを作成します。
|
TreeItem(T value, Node graphic)
値プロパティを指定されたオブジェクトに設定し、グラフィックを指定されたノードに設定して、TreeItemを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
<E extends Event> |
addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
このTreeItemにイベント・ハンドラを登録します。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
branchCollapsedEvent()
TreeItemが縮小状態になるようにTreeItemの展開プロパティが変更された場合に使用されるEventType。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
branchExpandedEvent()
TreeItemが展開状態になるようにTreeItemの展開プロパティが変更された場合に使用されるEventType。
|
EventDispatchChain |
buildEventDispatchChain(EventDispatchChain tail)
このターゲットのイベント・ディスパッチ・チェーンを構築します。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
childrenModificationEvent()
TreeItemの子リストが直接変更された場合に使用されるEventType。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
expandedItemCountChangeEvent()
TreeItemが変更され、その結果として子の数が視覚的に変わった場合に使用される汎用EventType。
|
BooleanProperty |
expandedProperty()
このTreeItemの展開された状態。
|
ObservableList<TreeItem<T>> |
getChildren()
このTreeItemの子。
|
Node |
getGraphic()
値プロパティの左側に通常表示されるノードを返します。
|
TreeItem<T> |
getParent()
このTreeItemの親。
|
T |
getValue()
このTreeItemが表すアプリケーション固有のデータを返します。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
graphicChangedEvent()
TreeItemのグラフィック・プロパティが変更された場合に使用されるEventType。
|
ObjectProperty<Node> |
graphicProperty()
値プロパティの左側に通常表示されるノード。
|
boolean |
isExpanded()
このTreeItemの展開された状態を返します。
|
boolean |
isLeaf()
子を持たないTreeItemはリーフです。
|
ReadOnlyBooleanProperty |
leafProperty()
TreeItemに子がない場合にtrueであるTreeItemリーフ・プロパティを表します。
|
TreeItem<T> |
nextSibling()
TreeItemの次の兄弟を返します。
|
TreeItem<T> |
nextSibling(TreeItem<T> afterNode)
指定されたノードの後にある次の兄弟を返します。
|
ReadOnlyObjectProperty<TreeItem<T>> |
parentProperty()
このTreeItemの親を表すプロパティ。
|
TreeItem<T> |
previousSibling()
TreeItemの前の兄弟を返します。
|
TreeItem<T> |
previousSibling(TreeItem<T> beforeNode)
指定されたノードの後にある前の兄弟を返します。
|
<E extends Event> |
removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
以前に登録したイベント・ハンドラをこのTreeItemから登録解除します。
|
void |
setExpanded(boolean value)
このTreeItemの展開された状態を設定します。
|
void |
setGraphic(Node value)
値プロパティの左側に通常表示されるノードを設定します。
|
void |
setValue(T value)
このTreeItemが表すアプリケーション固有のデータを設定します。
|
String |
toString()
この
TreeItem オブジェクトの文字列表現を返します。 |
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
treeNotificationEvent()
TreeItem内でイベントが発生したことを示すベースEventType。
|
static <T> EventType<TreeItem.TreeModificationEvent<T>> |
valueChangedEvent()
TreeItemの値プロパティが変更された場合に使用されるEventType。
|
ObjectProperty<T> |
valueProperty()
このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ。
|
public final ObjectProperty<T> valueProperty
public final ObjectProperty<Node> graphicProperty
getGraphic()
、setGraphic(Node)
public final BooleanProperty expandedProperty
public final ReadOnlyBooleanProperty leafProperty
isLeaf()
public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty
getParent()
public TreeItem()
public TreeItem(T value)
value
- このTreeItemの値として格納されるオブジェクト。public static <T> EventType<TreeItem.TreeModificationEvent<T>> treeNotificationEvent()
T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> expandedItemCountChangeEvent()
branchExpandedEvent()
、branchCollapsedEvent()
およびchildrenModificationEvent()
を参照)。T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchExpandedEvent()
T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchCollapsedEvent()
T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> childrenModificationEvent()
T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> valueChangedEvent()
T
- TreeItemに含まれる値の型。public static <T> EventType<TreeItem.TreeModificationEvent<T>> graphicChangedEvent()
T
- TreeItemに含まれる値の型。public final void setValue(T value)
public final T getValue()
public final ObjectProperty<T> valueProperty()
public final void setGraphic(Node value)
value
- ユーザーに表示されるグラフィック・ノード。public final Node getGraphic()
public final ObjectProperty<Node> graphicProperty()
getGraphic()
、setGraphic(Node)
public final void setExpanded(boolean value)
value
- このTreeItemに子がある場合、true
を指定してsetExpandedを呼び出すと、子が表示されます。false
を指定してsetExpandedを呼び出すと、TreeItemに属するすべての子が非表示になります。public final boolean isExpanded()
public final BooleanProperty expandedProperty()
public boolean isLeaf()
public final ReadOnlyBooleanProperty leafProperty()
isLeaf()
public final TreeItem<T> getParent()
public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty()
getParent()
public ObservableList<TreeItem<T>> getChildren()
public TreeItem<T> previousSibling()
public TreeItem<T> previousSibling(TreeItem<T> beforeNode)
beforeNode
- 前の兄弟が検索中であるTreeItem。public TreeItem<T> nextSibling()
public TreeItem<T> nextSibling(TreeItem<T> afterNode)
afterNode
- 次の兄弟が検索中であるTreeItem。public String toString()
TreeItem
オブジェクトの文字列表現を返します。public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail)
EventTarget
を対象にしたイベントの処理に関係する可能性があるイベント・ディスパッチャが含まれます。このイベント・ターゲットはチェーンに自動的には追加されないため、これがイベントを処理する場合は、それ自体のEventDispatcher
をチェーンに追加する必要があります。
イベント・ターゲットが階層の一部である場合、そのチェーンは通常、階層のルートからイベント・ターゲットまでの収集されたイベント・ディスパッチャから作成されます。
イベント・ディスパッチ・チェーンは、提供される初期イベント・ディスパッチ・チェーンに対する変更によって構築されます。返されるチェーンでは初期チェーンが最後にある必要があるため、ディスパッチャは初期チェーンの前に追加される必要があります。
呼出し元は、初期チェーンが変更されないままであることや、返される値によって異なるチェーンが参照されることを想定できません。
buildEventDispatchChain
、インタフェース: EventTarget
tail
- 構築元となる初期チェーンpublic <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
Cell
クラスのドキュメントを参照)。eventType
- ハンドラが受け取るイベントのタイプeventHandler
- 登録するハンドラNullPointerException
- イベント・タイプまたはハンドラがnullの場合public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
eventType
- 登録解除するイベント・タイプeventHandler
- 登録解除するハンドラNullPointerException
- イベント・タイプまたはハンドラがnullの場合Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.