モジュール javafx.controls
パッケージ javafx.scene.control

クラスTreeItem<T>

  • 型パラメータ:
    T - TreeItem内のvalueプロパティのタイプ。
    すべての実装されたインタフェース:
    EventTarget
    直系の既知のサブクラス:
    CheckBoxTreeItem


    public class TreeItem<T>
    extends Object
    implements EventTarget
    TreeViewなどのコントロールに値の階層を提供する単一ノードのモデル。 モデルは、必要に応じてメモリーに値をロードできるように実装できます。

    モデルには、アイテムの数、それらの位置または値自体が変更されたときに通知を受けるリスナーを登録できます。 ただし、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()があり、expandcollapseのブランチ・イベント・タイプは両方ともtreeNotificationEvent()です。 パフォーマンス上の理由から、リスニングする必要があるイベントのみをリスニングすることをお薦めします。 つまり、たとえば、TreeItem.treeNotificationEvent()ではなくTreeItem.valueChangedEvent()をリスニングすることが推奨されます。

    導入されたバージョン:
    JavaFX 2.0
    • プロパティの詳細

      • value

        public final ObjectProperty<T> valueProperty
        このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ。
        戻り値:
        このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ
      • graphic

        public final ObjectProperty<Node> graphicProperty
        値プロパティの左側に通常表示されるノード。 最大の効果を得るために、一般的には16x16のイメージとします。
        関連項目:
        getGraphic()setGraphic(Node)
      • leaf

        public final ReadOnlyBooleanProperty leafProperty
        TreeItemに子がない場合にtrueであるTreeItemリーフ・プロパティを表します。
        関連項目:
        isLeaf()
    • コンストラクタの詳細

      • TreeItem

        public TreeItem​()
        空のTreeItemを作成します。
      • TreeItem

        public TreeItem​(T value)
        指定されたオブジェクトに設定された値プロパティでTreeItemを作成します。
        パラメータ:
        value - このTreeItemの値として格納されるオブジェクト。
      • TreeItem

        public TreeItem​(T value,
                        Node graphic)
        値プロパティを指定されたオブジェクトに設定し、グラフィックを指定されたノードに設定して、TreeItemを作成します。
        パラメータ:
        value - このTreeItemの値として格納されるオブジェクト。
        graphic - このTreeItemの横にあるTreeViewに表示するノード。
    • メソッドの詳細

      • treeNotificationEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> treeNotificationEvent​()
        TreeItem内でイベントが発生したことを示すベースEventType。 TreeItemでイベントが発生した場合は、それによってTreeItemの親プロパティに従ってTreeItemチェーンがバブル・アップされる前に、イベントが発生したTreeItemのリスナーに対してイベントが起動されます。 これは、その親のTreeItemがnullであるTreeItemが、イベントがバブルを停止してそれ以上行われなくなるこのポイントに達するまで繰り返されます。 これは、ツリー内の任意のポイントで発生するイベントについてアラートするために、リスナーをTreeViewルート・ノードにインストールすることのみ必要であるため、TreeItemで発生するイベントのコストを比較的低くできることを意味します。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItem内でイベントが発生したときのベースEventType
      • expandedItemCountChangeEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> expandedItemCountChangeEvent​()
        TreeItemが変更され、その結果として子の数が視覚的に変わった場合に使用される汎用EventType。 通常、これはこのEventTypeのいずれかのサブタイプを使用して実現します(3つのサブタイプについては、branchExpandedEvent()branchCollapsedEvent()およびchildrenModificationEvent()を参照)。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemが変更を受け取ったときの一般的なEventType
        導入されたバージョン:
        JavaFX 8.0
      • branchExpandedEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchExpandedEvent​()
        TreeItemが展開状態になるようにTreeItemの展開プロパティが変更された場合に使用されるEventType。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemが変更を受け取ったときに使用されるEventType
      • branchCollapsedEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchCollapsedEvent​()
        TreeItemが縮小状態になるようにTreeItemの展開プロパティが変更された場合に使用されるEventType。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemが変更を受け取ったときのEventType
      • childrenModificationEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> childrenModificationEvent​()
        TreeItemの子リストが直接変更された場合に使用されるEventType。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemが子リストへの直接変更を受け取ったときのEventType
      • valueChangedEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> valueChangedEvent​()
        TreeItemの値プロパティが変更された場合に使用されるEventType。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemがそのvalueプロパティへの変更を受け取ったときのEventType
      • graphicChangedEvent

        public static <T> EventType<TreeItem.TreeModificationEvent<T>> graphicChangedEvent​()
        TreeItemのグラフィック・プロパティが変更された場合に使用されるEventType。
        型パラメータ:
        T - TreeItemに含まれる値の型。
        戻り値:
        TreeItemがそのグラフィック・プロパティへの変更を受け取ったときのEventType
      • setValue

        public final void setValue​(T value)
        このTreeItemが表すアプリケーション固有のデータを設定します。
        パラメータ:
        value - アプリケーション固有のデータ
      • getValue

        public final T getValue​()
        このTreeItemが表すアプリケーション固有のデータを返します。
        戻り値:
        このTreeItemが表すデータ
      • valueProperty

        public final ObjectProperty<T> valueProperty​()
        このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ。
        戻り値:
        このTreeItem内に含まれるアプリケーション固有のデータを表すプロパティ
      • setGraphic

        public final void setGraphic​(Node value)
        値プロパティの左側に通常表示されるノードを設定します。 最大の効果を得るために、一般的には16x16のイメージとします。
        パラメータ:
        value - ユーザーに表示されるグラフィック・ノード。
      • getGraphic

        public final Node getGraphic​()
        値プロパティの左側に通常表示されるノードを返します。 最大の効果を得るために、一般的には16x16のイメージとします。
        戻り値:
        ユーザーに表示されるグラフィック・ノード。
      • graphicProperty

        public final ObjectProperty<Node> graphicProperty​()
        値プロパティの左側に通常表示されるノード。 最大の効果を得るために、一般的には16x16のイメージとします。
        関連項目:
        getGraphic()setGraphic(Node)
      • setExpanded

        public final void setExpanded​(boolean value)
        このTreeItemの展開された状態を設定します。 これは、子のないTreeItemに対しては効果がありません。 ただし、子を持つTreeItemでは、このプロパティを切り替えると、expandedがtrueかfalseかに基づいて、視覚的に子が表示されるか、非表示になります。
        パラメータ:
        value - このTreeItemに子がある場合、trueを指定してsetExpandedを呼び出すと、子が表示されます。 falseを指定してsetExpandedを呼び出すと、TreeItemに属するすべての子が非表示になります。
      • isExpanded

        public final boolean isExpanded​()
        このTreeItemの展開された状態を返します。
        戻り値:
        このTreeItemの展開された状態を返します。
      • isLeaf

        public boolean isLeaf​()
        子を持たないTreeItemはリーフです。 TreeItemをリーフにできる方法を定義する代替方法をサポートするために、isLeafメソッドをサブクラスによってオーバーライドすることはできますが、一般的な前提は同じです。つまり、リーフはユーザーが拡張できず、公開ノードの表示や拡張リクエストへの応答などは行われません。
        戻り値:
        このTreeItemに子がない場合はtrue
      • leafProperty

        public final ReadOnlyBooleanProperty leafProperty​()
        TreeItemに子がない場合にtrueであるTreeItemリーフ・プロパティを表します。
        関連項目:
        isLeaf()
      • getParent

        public final TreeItem<T> getParent​()
        このTreeItemの親。 TreeItemごとに1つまで親を持つことができます。 TreeItemに親がない場合、それはツリー・モデルのルートを表します。
        戻り値:
        このTreeItemの親、またはTreeItemに親がない場合はnull。
      • getChildren

        public ObservableList<TreeItem<T>> getChildren​()
        このTreeItemの子。 このメソッドは頻繁に呼び出されるため、返されるリストがTreeItemの実装によってキャッシュされることをお薦めします。
        戻り値:
        TreeItemに属する子のTreeItemを含むリスト。
      • previousSibling

        public TreeItem<T> previousSibling​()
        TreeItemの前の兄弟を返します。 順序は、そのTreeItemの、TreeItemの親に属する子のリストにおける、その兄弟に対して相対的な位置に基づきます。
        戻り値:
        現在のTreeItemの前の兄弟であるTreeItem、またはそのような兄弟が見つからない場合はnull。
      • previousSibling

        public TreeItem<T> previousSibling​(TreeItem<T> beforeNode)
        指定されたノードの後にある前の兄弟を返します。 順序は、該当するTreeItemの、TreeItemの親に属する子のリストにおける、その兄弟に対して相対的な位置に基づきます。
        パラメータ:
        beforeNode - 前の兄弟が検索中であるTreeItem。
        戻り値:
        指定されたTreeItemの前の兄弟であるTreeItem、またはそのような兄弟が見つからない場合はnull。
      • nextSibling

        public TreeItem<T> nextSibling​()
        TreeItemの次の兄弟を返します。 順序は、そのTreeItemの、TreeItemの親に属する子のリストにおける、その兄弟に対して相対的な位置に基づきます。
        戻り値:
        現在のTreeItemの次の兄弟であるTreeItem、またはそのような兄弟が見つからない場合はnull。
      • nextSibling

        public TreeItem<T> nextSibling​(TreeItem<T> afterNode)
        指定されたノードの後にある次の兄弟を返します。 順序は、該当するTreeItemの、TreeItemの親に属する子のリストにおける、その兄弟に対して相対的な位置に基づきます。
        パラメータ:
        afterNode - 次の兄弟が検索中であるTreeItem。
        戻り値:
        指定されたTreeItemの次の兄弟であるTreeItem、またはそのような兄弟が見つからない場合はnull。
      • toString

        public String toString​()
        このTreeItemオブジェクトの文字列表現を返します。
        オーバーライド:
        toString 、クラス:  Object
        戻り値:
        このTreeItemオブジェクトの文字列表現
      • buildEventDispatchChain

        public EventDispatchChain buildEventDispatchChain​(EventDispatchChain tail)
        このターゲットのイベント・ディスパッチ・チェーンを構築します。 イベント・ディスパッチ・チェーンには、このEventTargetを対象にしたイベントの処理に関係する可能性があるイベント・ディスパッチャが含まれます。 このイベント・ターゲットはチェーンに自動的には追加されないため、これがイベントを処理する場合は、それ自体のEventDispatcherをチェーンに追加する必要があります。

        イベント・ターゲットが階層の一部である場合、そのチェーンは通常、階層のルートからイベント・ターゲットまでの収集されたイベント・ディスパッチャから作成されます。

        イベント・ディスパッチ・チェーンは、提供される初期イベント・ディスパッチ・チェーンに対する変更によって構築されます。 返されるチェーンでは初期チェーンが最後にある必要があるため、ディスパッチャは初期チェーンの前に追加される必要があります。

        呼出し元は、初期チェーンが変更されないままであることや、返される値によって異なるチェーンが参照されることを想定できません。

        定義:
        buildEventDispatchChain 、インタフェース: EventTarget
        パラメータ:
        tail - 構築元となる初期チェーン
        戻り値:
        このターゲットの結果のイベント・ディスパッチ・チェーン
      • addEventHandler

        public <E extends Event> void addEventHandler​(EventType<E> eventType,
                                                      EventHandler<E> eventHandler)
        このTreeItemにイベント・ハンドラを登録します。 TreeItemクラスにより、アイテムの数、それらの位置または値自体が変更されたときに通知されるリスナーを登録できます。 ただし、TreeItemはノードではないため、TreeItemでは視覚的なイベントは起動されないことに注意してください。 これらのイベントを取得するには、関連するオブザーバをTreeCellインスタンスに追加する必要があります(カスタム・セル・ファクトリを使用 - 詳細は、Cellクラスのドキュメントを参照)。
        型パラメータ:
        E - イベント
        パラメータ:
        eventType - ハンドラが受け取るイベントのタイプ
        eventHandler - 登録するハンドラ
        例外:
        NullPointerException - イベント・タイプまたはハンドラがnullの場合
      • removeEventHandler

        public <E extends Event> void removeEventHandler​(EventType<E> eventType,
                                                         EventHandler<E> eventHandler)
        以前に登録したイベント・ハンドラをこのTreeItemから登録解除します。 1つのハンドラが複数の異なるイベント・タイプに登録されているため、呼出し元はハンドラを登録解除する特定のイベント・タイプを指定する必要があります。
        型パラメータ:
        E - イベント
        パラメータ:
        eventType - 登録解除するイベント・タイプ
        eventHandler - 登録解除するハンドラ
        例外:
        NullPointerException - イベント・タイプまたはハンドラがnullの場合