- java.lang.Object
-
- javafx.scene.control.TreeItem<T>
-
- 参数类型
-
T
- TreeItem中的value
属性的类型。
- All Implemented Interfaces:
-
EventTarget
- 已知直接子类:
-
CheckBoxTreeItem
public class TreeItem<T> extends Object implements EventTarget
单个节点的模型为诸如TreeView之类的控件提供值的层次结构。 可以实现该模型,使得值可以根据需要加载到存储器中。该模型允许注册听众,将被通知为项目变更的数量,他们的位置或值本身如何变化。 但是请注意,TreeItem 不是 Node,因此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);
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支持与场景图中其他地方相同的事件冒泡概念。 这意味着没有必要在所有TreeItems上收听事件(这当然不鼓励!)。 更好的和更低成本的解决方案是将事件监听器附加到TreeView
root
项目。 只要在事件发生的地方和根TreeItem之间存在路径,事件将被冒泡到根项目。但是请注意,TreeItem 不是一个Node,这意味着只有在TreeItem中定义的事件类型才能被传递。 要收听一般事件(例如鼠标交互),需要在TreeView中包含的
cells
(通过提供cell factory
)添加必要的侦听器。TreeItem类定义了一些具有定义层次结构的事件。 这些显示如下(按照链接了解有关每个事件类型的更多信息):
上面所示的缩进表示事件类型之间的关系。 例如,所有TreeItem事件类型有
treeNotificationEvent()
其父事件类型,分支expand
/ 二七○七○二一五○二五七三八一事件类型均为treeNotificationEvent()
。 出于性能原因,鼓励您只听取您需要听的事件。 这意味着鼓励最好听,例如TreeItem.valueChangedEvent()
,而不是TreeItem.treeNotificationEvent()
。- 从以下版本开始:
- JavaFX 2.0
-
-
Property Summary
Properties Type Property 描述 BooleanProperty
expanded
这个TreeItem的扩展状态。ObjectProperty<Node>
graphic
通常显示在value属性左侧的节点。ReadOnlyBooleanProperty
leaf
表示TreeItem leaf属性,如果TreeItem没有子节点,则属性为true。ReadOnlyObjectProperty<TreeItem<T>>
parent
表示此TreeItem父项的属性。ObjectProperty<T>
value
表示此TreeItem中包含的特定于应用程序的数据的属性。
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
TreeItem.TreeModificationEvent<T>
一个Event
,其中包含所有形式的TreeItem修改的相关信息。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 <E extends Event>
voidaddEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
将一个事件处理程序注册到此TreeItem。static <T> EventType<TreeItem.TreeModificationEvent<T>>
branchCollapsedEvent()
当TreeItem接收到其扩展属性的修改时使用的EventType,使得TreeItem现在处于折叠状态。static <T> EventType<TreeItem.TreeModificationEvent<T>>
branchExpandedEvent()
当TreeItem接收到其扩展属性的修改时使用的EventType,使得TreeItem现在处于展开状态。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()
返回通常显示在value属性左侧的节点。TreeItem<T>
getParent()
这个TreeItem的父项。T
getValue()
返回此TreeItem表示的特定于应用程序的数据。static <T> EventType<TreeItem.TreeModificationEvent<T>>
graphicChangedEvent()
当TreeItem接收到其图形属性的修改时使用的EventType。ObjectProperty<Node>
graphicProperty()
通常显示在value属性左侧的节点。boolean
isExpanded()
返回此TreeItem的展开状态。boolean
isLeaf()
TreeItem是一个叶子,如果它没有孩子。ReadOnlyBooleanProperty
leafProperty()
表示TreeItem leaf属性,如果TreeItem没有子节点,则属性为true。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>
voidremoveEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
从此TreeItem中注销先前注册的事件处理程序。void
setExpanded(boolean value)
设置此TreeItem的展开状态。void
setGraphic(Node value)
设置通常显示在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接收到对其value属性的修改时使用的EventType。ObjectProperty<T>
valueProperty()
表示此TreeItem中包含的特定于应用程序的数据的属性。
-
-
-
Property Detail
-
value
public final ObjectProperty<T> valueProperty
表示此TreeItem中包含的特定于应用程序的数据的属性。- 结果
- 表示此TreeItem中包含的特定于应用程序的数据的属性
-
graphic
public final ObjectProperty<Node> graphicProperty
通常显示在value属性左侧的节点。 为了获得最佳效果,这往往是一个16x16的图像。- 另请参见:
-
getGraphic()
,setGraphic(Node)
-
expanded
public final BooleanProperty expandedProperty
这个TreeItem的扩展状态。- 另请参见:
-
isExpanded()
,setExpanded(boolean)
-
leaf
public final ReadOnlyBooleanProperty leafProperty
表示TreeItem leaf属性,如果TreeItem没有子节点,则属性为true。- 另请参见:
-
isLeaf()
-
parent
public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty
表示此TreeItem父项的属性。- 另请参见:
-
getParent()
-
-
构造方法详细信息
-
TreeItem
public TreeItem()
创建一个空TreeItem。
-
TreeItem
public TreeItem(T value)
创建一个TreeItem,其value属性设置为提供的对象。- 参数
-
value
- 要存储的对象作为此TreeItem的值。
-
-
方法详细信息
-
treeNotificationEvent
public static <T> EventType<TreeItem.TreeModificationEvent<T>> treeNotificationEvent()
用于指示事件在TreeItem中发生的基本EventType。 当TreeItem中发生事件时,事件发生之前,事件将触发TreeItem上的任何侦听器,然后通过跟随TreeItem父属性来启动TreeItem链。 这将重复,直到达到父TreeItem为null的TreeItem此时,事件将停止“冒泡”,不再进一步。 这意味着在TreeItem上发生的事件可以相对便宜,因为监听器只需要安装在TreeView根节点上,以便在树中的任何一点发生事件。- 参数类型
-
T
- TreeItem中包含的值的类型。 - 结果
- TreeItem中发生事件时的基本EventType
-
expandedItemCountChangeEvent
public static <T> EventType<TreeItem.TreeModificationEvent<T>> expandedItemCountChangeEvent()
当TreeItem接收到一个修改,导致孩子数目可见的更改时使用的常规EventType。 这是通过子类型此的EventType中的一个通常实现(参见branchExpandedEvent()
,branchCollapsedEvent()
和childrenModificationEvent()
为三个子类型)。- 参数类型
-
T
- TreeItem中包含的值的类型。 - 结果
- TreeItem接收修改时的常规EventType
- 从以下版本开始:
- JavaFX 8.0
-
branchExpandedEvent
public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchExpandedEvent()
当TreeItem接收到其扩展属性的修改时使用的EventType,使得TreeItem现在处于展开状态。- 参数类型
-
T
- TreeItem中包含的值的类型。 - 结果
- TreeItem接收到修改时使用的EventType
-
branchCollapsedEvent
public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchCollapsedEvent()
当TreeItem接收到其扩展属性的修改时使用的EventType,使得TreeItem现在处于折叠状态。- 参数类型
-
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接收到对其value属性的修改时使用的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)
设置通常显示在value属性左侧的节点。 为了获得最佳效果,这往往是一个16x16的图像。- 参数
-
value
- 将显示给用户的图形节点。
-
getGraphic
public final Node getGraphic()
返回通常显示在value属性左侧的节点。 为了获得最佳效果,这往往是一个16x16的图像。- 结果
- 将显示给用户的图形节点。
-
graphicProperty
public final ObjectProperty<Node> graphicProperty()
通常显示在value属性左侧的节点。 为了获得最佳效果,这往往是一个16x16的图像。- 另请参见:
-
getGraphic()
,setGraphic(Node)
-
setExpanded
public final void setExpanded(boolean value)
设置此TreeItem的展开状态。 这对没有孩子的TreeItem没有影响。 在有孩子的TreeItem上,切换该属性的结果是,视觉上孩子将会变得可见或隐藏,基于是否将扩展设置为true或false。- 参数
-
value
- 如果此TreeItem有子项,则使用true
调用true
将导致孩子变得可见。 使用false
调用setExpanded将隐藏属于TreeItem的任何子项。
-
isExpanded
public final boolean isExpanded()
返回此TreeItem的展开状态。- 结果
- 返回此TreeItem的展开状态。
-
expandedProperty
public final BooleanProperty expandedProperty()
这个TreeItem的扩展状态。- 另请参见:
-
isExpanded()
,setExpanded(boolean)
-
isLeaf
public boolean isLeaf()
TreeItem是一个叶子,如果它没有孩子。 当然,可以通过子类覆盖isLeaf方法来支持定义TreeItem可能是一个叶子的替代方法,但是一般的前提是相同的:叶子不能被用户扩展,因此不会显示一个披露节点或响应扩展请求。- 结果
- 如果此TreeItem没有子项,则为true
-
leafProperty
public final ReadOnlyBooleanProperty leafProperty()
表示TreeItem leaf属性,如果TreeItem没有子节点,则属性为true。- 另请参见:
-
isLeaf()
-
getParent
public final TreeItem<T> getParent()
这个TreeItem的父项。 每个TreeItem可以只有一个以上的父项。 如果TreeItem没有父项,它表示树模型中的根。- 结果
- 此TreeItem的父项,如果TreeItem没有父项,则为null。
-
parentProperty
public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty()
表示此TreeItem父项的属性。- 另请参见:
-
getParent()
-
getChildren
public ObservableList<TreeItem<T>> getChildren()
这个TreeItem的孩子。 这种方法被频繁地调用,因此推荐返回的列表被任何TreeItem实现缓存。- 结果
- 包含属于TreeItem的子TreeItems的列表。
-
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
对象的字符串表示形式。
-
buildEventDispatchChain
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail)
为此目标构建事件调度链。 事件调度链包含可能对处理针对EventTarget
的事件感兴趣的事件调度EventTarget
。 此事件目标不会自动添加到链中,因此如果要处理事件,则需要为链接添加一个EventDispatcher
。在事件目标是某些层次结构的一部分的情况下,它的链通常是从从层次结构的根被收集到事件目标的事件分派器构建的。
事件调度链是通过修改提供的初始事件调度链来构建的。 返回的链应该在其末端具有初始链,所以调度员应该放在初始链上。
调用者不应该假定初始链条保持不变,也不会返回值引用不同的链。
- Specified by:
-
buildEventDispatchChain
在接口EventTarget
- 参数
-
tail
- 建立起来的初始链 - 结果
- 此目标的结果事件调度链
-
addEventHandler
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
将一个事件处理程序注册到此TreeItem。 TreeItem类允许监听器的注册,将被通知为项目更改的数量,它们的位置或值本身是如何变化的。 但是请注意,TreeItem 不是 Node,因此TreeItem上不会触发视觉事件。 要获得这些事件,有必要将相关观察者添加到TreeCell实例(通过一个自定义单元格工厂 - 有关详细信息,请参阅Cell
类文档)。- 参数类型
-
E
- 事件 - 参数
-
eventType
- 由处理程序接收的事件的类型 -
eventHandler
- 要注册的处理程序 - 异常
-
NullPointerException
- 如果事件类型或处理程序为空
-
removeEventHandler
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler)
从此TreeItem中注销先前注册的事件处理程序。 一个处理程序可能已被注册用于不同的事件类型,因此调用者需要指定特定的事件类型,从中注销处理程序。- 参数类型
-
E
- 事件 - 参数
-
eventType
- 要注销的事件类型 -
eventHandler
- 要注销的处理程序 - 异常
-
NullPointerException
- 如果事件类型或处理程序为空
-
-