Module  javafx.controls
软件包  javafx.scene.control

Class TreeTableView<S>

  • 参数类型
    S - 此TreeTableView中使用的TreeItem实例的类型。
    All Implemented Interfaces:
    StyleableEventTargetSkinnable


    @DefaultProperty("root")
    public class TreeTableView<S>
    extends Control
    TreeTableView控件旨在可视化无限数量的数据行,分为列。 TreeTableView控件在概念上非常类似于TreeViewTableView控件,当您阅读时,您将看到API大致相同。 然而,给予了很高层次的概述,你会注意到,TreeTableView使用相同TreeItem API为TreeView ,而你因此需要简单地设置root node在TreeTableView。 类似地,TreeTableView控件使用与TableView控件使用的相同的基于TableColumn的方法,除了使用特定于TableView的TableColumn类别之外,您应该改用特定于TreeTableView的TreeTableColumn类。 有关如何创建TreeTableView实例的示例,请参阅下面的“创建TreeTableView”控件部分。

    TableView控件一样,TreeTableView控件具有许多功能,包括:

    创建一个TreeTableView

    创建TreeTableView是一个多步骤的过程,也取决于需要表示的底层数据模型。 对于这个例子,我们将使用TreeTableView来可视化文件系统,因此将使用如下定义的虚构(和非常简化的)File类:

       public class File { private StringProperty name; public void setName(String value) { nameProperty().set(value); } public String getName() { return nameProperty().get(); } public StringProperty nameProperty() { if (name == null) name = new SimpleStringProperty(this, "name"); return name; } private LongProperty lastModified; public void setLastModified(long value) { lastModifiedProperty().set(value); } public long getLastModified() { return lastModifiedProperty().get(); } public LongProperty lastModifiedProperty() { if (lastModified == null) lastModified = new SimpleLongProperty(this, "lastModified"); return lastModified; } } 

    首先,需要定义一个TreeTableView实例:

       TreeTableView<File> treeTable = new TreeTableView<>(); 

    随着基本的TreeTableView实例化,我们接下来关注数据模型。 如上所述,对于这个例子,我们将使用File实例来表示一个文件系统。 为此,我们需要定义树表的根节点,如下所示:

       TreeItem<File> root = new TreeItem<>(new File("/")); treeTable.setRoot(root); 

    随着根目录的设置,TreeTableView会在根目录的children发生变化时自动更新。

    在这一点上,我们现在有一个TreeTableView挂接来观察根TreeItem实例。 缺失的成分现在是分解模型中包含的数据并在一个或多个TreeTableColumn实例中表示的方法。 要创建一个两列的TreeTableView来显示文件名和最后修改的属性,我们扩展如上所示的代码如下:

       TreeTableColumns<File,String> fileNameCol = new TreeTableColumn<>("Filename"); TreeTableColumns<File,Long> lastModifiedCol = new TreeTableColumn<>("Size"); table.getColumns().setAll(fileNameCol, lastModifiedCol); 

    使用上面的代码,我们几乎完全定义了创建TreeTableView实例所需的最小属性。 唯一缺少的是27072983966129的两列 - 这是负责确定给定行中单元格的值的这些。 通常这些可以使用TreeItemPropertyValueFactory类来指定,但是您也可以创建一个匿名的内部类并执行必要的任务。 例如,使用TreeItemPropertyValueFactory您将执行以下操作:

       fileNameCol.setCellValueFactory(new TreeItemPropertyValueFactory("name")); lastModifiedCol.setCellValueFactory(new TreeItemPropertyValueFactory("lastModified")); 
    运行此代码(假设文件系统结构可能内置在内存中)会导致一个TreeTableView被显示为两个名称和lastModified列。 File类的任何其他属性将不会显示,因为没有为它们定义TreeTableColumns。

    TreeTableView支持不包含属性的类

    以上显示的代码是在域对象设计时考虑到JavaFX属性时创建TreeTableView的最短代码(另外, TreeItemPropertyValueFactory支持普通的JavaBean属性,尽管有一个警告,因此请参阅类文档以获取更多信息信息)。 当不是这种情况时,需要提供一个自定义单元格值工厂。 有关单元格值工厂的更多信息,请参见TreeTableColumn API文档,但简要说明如何指定TreeTableColumns:

       firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { public ObservableValue<String> call(CellDataFeatures<Person, String> p) { // p.getValue() returns the TreeItem<Person> instance for a particular TreeTableView row, // p.getValue().getValue() returns the Person instance inside the TreeItem<Person> return p.getValue().getValue().firstNameProperty(); } }); } 

    TreeTableView Selection / Focus API

    要跟踪选择和重点,有必要熟悉SelectionModelFocusModel类。 TreeTableView最多有一个这些类的一个实例,分别可从selectionModelfocusModel属性获得。 虽然可以使用此API来设置新的选择模型,但在大多数情况下,这不是必需的 - 默认选择和焦点模型应该在大多数情况下工作。

    在实例化TreeTableView时使用的默认值为SelectionModelMultipleSelectionModel抽象类的实现。 但是,如selectionMode属性的API文档中所述,默认值为SelectionMode.SINGLE 要在默认TreeTableView实例中启用多选,因此需要执行以下操作:

       treeTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 

    自定义TreeTableView视觉

    TreeTableView的视觉效果可以通过替换默认的row factory完全自定义。 一行工厂用于生成TreeTableRow实例,用于表示TreeTableView中的整个行。

    在许多情况下,这不是所期望的,因为更常见的情况是,单元格是以每列为单位进行定制的,而不是每行。 因此,重要的是要注意, TreeTableRow不是TreeTableCell A TreeTableRow只是一个零或多个TreeTableCell的容器,在大多数情况下,您更有可能要创建自定义TreeTableCells而不是TreeTableRows。 创建自定义TreeTableRow实例的主要用例很可能是引入某种形式的列跨越支持。

    您可以通过将适当的函数分配给TreeTableColumns cell factory属性来创建自定义的TreeTableCell实例。

    有关如何编写自定义单元格的更完整的说明,请参阅Cell类文档。

    编辑

    此控件支持值的内联编辑,本节尝试概述可用的API以及如何使用它们。

    首先,细胞编辑通常需要不同于不编辑细胞的用户界面。 这是正在使用的Cell实现的责任。 对于TreeTableView,强烈建议编辑为per-TreeTableColumn而不是per row ,因为您希望用户不希望用不同的方式编辑每个列值,并且此方法允许对每列进行编辑。 您可以选择单元格是否永久处于编辑状态(例如,这对于CheckBox单元格是常见的),或者在编辑开始时切换到不同的UI(例如,当单元格上接收到双击时)。

    要知道在单元格上请求编辑时,只需覆盖Cell.startEdit()方法,并根据需要更新单元格textgraphic属性(例如,将文本设置为空,并将图形设置为TextField )。 此外,您还应该覆盖Cell.cancelEdit()以便在编辑结束时将UI重置为原始的可视状态。 在这两种情况下,重要的是您还要确保您调用超级方法以使单元格执行所有必须执行的任务,以进入或退出其编辑模式。

    一旦您的单元格处于编辑状态,您最感兴趣的下一件事就是如何提交或取消正在进行的编辑。 这是您作为电池厂商的责任。 您的单元实现将基于用户输入(例如当用户按下键盘上的Enter键或ESC键时)知道编辑结束。 发生这种情况时,您有责任酌情致电Cell.commitEdit(Object)Cell.cancelEdit()

    当您拨打Cell.commitEdit(Object)一个事件触发到TreeTableView,您可以通过TreeTableColumn.setOnEditCommit(javafx.event.EventHandler)添加一个EventHandler观察。 同样,您还可以观察edit startedit cancel编辑事件。

    默认情况下,TreeTableColumn编辑提交处理程序不为空,并且使用默认处理程序尝试覆盖当前正在编辑的行中的项目的属性值。 它可以这样做,因为Cell.commitEdit(Object)方法被传递到新的值,并且这被传递到编辑提交处理程序通过CellEditEvent被触发。 只需调用TreeTableColumn.CellEditEvent.getNewValue()即可检索该值。

    需要注意的是,如果你把它是非常重要的TreeTableColumn.setOnEditCommit(javafx.event.EventHandler)用自己EventHandler ,那么你会删除默认的处理程序。 除非您再处理该属性(或相关数据源)的回写,否则不会发生任何事情。 您可以使用TableColumnBase.addEventHandler(javafx.event.EventType, javafx.event.EventHandler)方法添加一个270702984729222 EventType与您所需的EventHandler作为第二个参数。 使用此方法,您将不会替换默认实现,但在发生编辑提交时会收到通知。

    希望这个总结回答了一些常见问题。 幸运的是,JavaFX附带了许多预先构建的单元格工厂,可以代表您处理所有的编辑要求。 您可以在javafx.scene.control.cell包中找到这些预构建的单元工厂。

    从以下版本开始:
    JavaFX 8.0
    另请参见:
    TreeTableColumnTreeTablePosition
    • 字段详细信息

      • UNCONSTRAINED_RESIZE_POLICY

        public static final Callback<TreeTableView.ResizeFeatures,Boolean> UNCONSTRAINED_RESIZE_POLICY

        非常简单的调整策略,只需通过提供的增量来调整指定列的大小,并将所有其他列(给定列的右侧)向右移动(当增量为正)或向左(当增量为负数时) 。

        它还处理我们通过共享新空间嵌套列或者在所有直接子列之间均匀地减去已移除的空间的情况。 当然,直接的孩子本身可能是嵌套的,然后他们会对孩子们使用这个政策。

      • CONSTRAINED_RESIZE_POLICY

        public static final Callback<TreeTableView.ResizeFeatures,Boolean> CONSTRAINED_RESIZE_POLICY

        确保此表中所有可见叶列的宽度的简单策略总和等于表本身的宽度。

        当用户使用此策略调整列宽时,表会自动调整右侧列的宽度。 当用户增加列宽时,表会减小最右列的宽度,直到达到最小宽度。 然后它减小第二个最右边的列的宽度,直到达到最小宽度等等。 当所有右侧列达到最小尺寸时,用户不能再增加已调整大小的列的大小。

      • DEFAULT_SORT_POLICY

        public static final Callback<TreeTableView,Boolean> DEFAULT_SORT_POLICY
        如果没有指定其他策略,则该TreeTableView将使用默认值sort policy 排序策略是一个简单的Callback ,它接受一个TreeTableView作为唯一的参数,并期望一个布尔响应来表示排序是否成功。 一个布尔响应为true表示成功,并且一个false(或null)的响应将被视为代表失败。
    • 构造方法详细信息

      • TreeTableView

        public TreeTableView​()
        创建一个空TreeTableView。

        有关其他属性的默认状态的详细信息,请参阅TreeTableView类文档。

      • TreeTableView

        public TreeTableView​(TreeItem<S> root)
        使用提供的根节点创建TreeTableView。

        有关其他属性的默认状态的详细信息,请参阅TreeTableView类文档。

        参数
        root - 该节点作为此TreeTableView中的根。
    • 方法详细信息

      • editStartEvent

        public static <S> EventType<TreeTableView.EditEvent<S>> editStartEvent​()
        EventType用于指示在触发事件的TreeTableView中启动了编辑事件。
        参数类型
        S - 此TreeTableView中使用的TreeItem实例的类型
        结果
        用于指示编辑事件已启动的EventType
      • editCancelEvent

        public static <S> EventType<TreeTableView.EditEvent<S>> editCancelEvent​()
        EventType用于指示事件被触发的TreeTableView中刚刚取消了编辑事件。
        参数类型
        S - 此TreeTableView中使用的TreeItem实例的类型
        结果
        用于指示编辑事件刚刚被取消的EventType
      • editCommitEvent

        public static <S> EventType<TreeTableView.EditEvent<S>> editCommitEvent​()
        用于指示TreeTableView中的编辑已提交的EventType。 这意味着用户对TreeItem的数据进行了更改,UI应该被更新。
        参数类型
        S - 此TreeTableView中使用的TreeItem实例的类型
        结果
        用于指示TreeTableView中的编辑已提交的EventType
      • getNodeLevel

        @Deprecated(since="8u20")
        public static int getNodeLevel​(TreeItem<?> node)
        已过时。 此方法无法正确计算从给定TreeItem到TreeTableView根的距离。 从JavaFX 8.0_20开始,正确的方法是通过getTreeItemLevel(TreeItem)
        返回给定TreeItem的“缩进”级别数,基于可以递归调用的次数TreeItem.getParent() 如果TreeItem没有任何父集,则返回的值将为零。 对于每次递归调用getParent(),返回的值都将增加1。

        重要注意事项:此方法已被弃用,因为它不考虑根节点。 这意味着如果根节点具有父节点,则此方法将遍历TreeTableView控件的根节点。 如果这很重要,请拨打getTreeItemLevel(TreeItem)

        参数
        node - 需要级别的TreeItem。
        结果
        表示给定节点上父节点数的整数,如果给定的TreeItem为空,则为-1。
      • setRoot

        public final void setRoot​(TreeItem<S> value)
        设置此TreeTableView中的根节点。 有关详细信息,请参阅TreeItem类级别的文档。
        参数
        value - 将放置在TreeTableView根目录的TreeItem
      • getRoot

        public final TreeItem<S> getRoot​()
        返回此TreeTableView的当前根节点,如果未指定根节点,则返回null。
        结果
        当前根节点,如果没有根节点存在则为null。
      • rootProperty

        public final ObjectProperty<TreeItem<S>> rootProperty​()
        表示TreeTableView根节点的属性。
        结果
        根属性
      • setShowRoot

        public final void setShowRoot​(boolean value)
        指定是否应在此TreeTableView中显示根 TreeItem根。
        参数
        value - 如果为true,将显示根 value ,如果为false,它将被隐藏。
      • isShowRoot

        public final boolean isShowRoot​()
        如果应该显示TreeTableView的根,则返回true,否则返回false。 默认情况下,Root TreeItem在TreeTableView中可见。
        结果
        如果应该显示TreeTableView的根,则为true
      • setTreeColumn

        public final void setTreeColumn​(TreeTableColumn<S,?> value)
        设置属性treeColumn的值。
        Property description:
        表示哪个列应该在其中显示披露节点的属性(即带有箭头的列)。 默认情况下,如果此属性为空,则为最左列,否则将为指定的列,假定它为非空,并包含在visible leaf columns列表中。
      • getTreeColumn

        public final TreeTableColumn<S,?> getTreeColumn​()
        获取属性treeColumn的值。
        Property description:
        表示哪个列应该在其中显示披露节点的属性(即带有箭头的列)。 默认情况下,如果此属性为空,则为最左列,否则将为指定的列,假定它为非空,并包含在visible leaf columns列表中。
      • expandedItemCountProperty

        public final ReadOnlyIntegerProperty expandedItemCountProperty​()

        表示当前能够在TreeTableView中可见的树节点数。 这实质上是所有扩展的树项目及其子项的计数。

        例如,如果只有根节点可见,则expandItemCount将为1。 如果根有三个孩子并且根被扩大,那么这个值将是四个。

        另请参见:
        getExpandedItemCount()
      • getExpandedItemCount

        public final int getExpandedItemCount​()
        获取属性expandedItemCount的值。
        Property description:

        表示当前能够在TreeTableView中可见的树节点数。 这实质上是所有扩展的树项目及其子项的计数。

        例如,如果只有根节点可见,则expandItemCount将为1。 如果根有三个孩子并且根被扩大,那么这个值将是四个。

      • setEditable

        public final void setEditable​(boolean value)
        设置属性可编辑的值。
        Property description:
        指定此TreeTableView是否可编辑 - 只有当TreeTableView和TreeCells都可编辑时,TreeCell才能进入编辑状态。
      • isEditable

        public final boolean isEditable​()
        获取可编辑属性的值。
        Property description:
        指定此TreeTableView是否可编辑 - 只有当TreeTableView和TreeCells都可编辑时,TreeCell才能进入编辑状态。
      • editableProperty

        public final BooleanProperty editableProperty​()
        指定此TreeTableView是否可编辑 - 只有当TreeTableView和TreeCells都可编辑时,TreeCell才能进入编辑状态。
        另请参见:
        isEditable()setEditable(boolean)
      • getEditingCell

        public final TreeTablePosition<S,?> getEditingCell​()
        获取属性editingCell的值。
        Property description:
        表示正在编辑的当前单元格,如果没有编辑单元格,则为空。
      • tableMenuButtonVisibleProperty

        public final BooleanProperty tableMenuButtonVisibleProperty​()
        当用户单击TableView中的指定空间时,这可以控制菜单按钮是否可用,其中是该表中每个TreeTableColumn的无线菜单项。 此菜单允许用户轻松显示和隐藏所有TreeTableColumns。
        另请参见:
        isTableMenuButtonVisible()setTableMenuButtonVisible(boolean)
      • setTableMenuButtonVisible

        public final void setTableMenuButtonVisible​(boolean value)
        设置属性tableMenuButtonVisible的值。
        Property description:
        当用户单击TableView中的指定空间时,这可以控制菜单按钮是否可用,其中是该表中每个TreeTableColumn的无线菜单项。 此菜单允许用户轻松显示和隐藏所有TreeTableColumns。
      • isTableMenuButtonVisible

        public final boolean isTableMenuButtonVisible​()
        获取属性tableMenuButtonVisible的值。
        Property description:
        当用户单击TableView中的指定空间时,这可以控制菜单按钮是否可用,其中是该表中每个TreeTableColumn的无线菜单项。 此菜单允许用户轻松显示和隐藏所有TreeTableColumns。
      • rowFactoryProperty

        public final ObjectProperty<Callback<TreeTableView<S>,TreeTableRow<S>>> rowFactoryProperty​()
        一个生成TreeTableRow的函数。 该系统负责重用TreeTableRows。 从此函数返回一个TreeTableRow,它可能可用于在TableView中表示单个行。

        请注意,TreeTableRow 不是 TableCell。 TreeTableRow只是一个TableCell的容器,在大多数情况下,您更有可能创建自定义TableCells而不是TreeTableRows。 创建自定义TreeTableRow实例的主要用例很可能是引入某种形式的列跨越支持。

        您可以通过将适当的函数分配给TreeTableColumn类中的cellFactory属性来创建每个列的自定义TableCell实例。

        另请参见:
        getRowFactory()setRowFactory(Callback)
      • setRowFactory

        public final void setRowFactory​(Callback<TreeTableView<S>,TreeTableRow<S>> value)
        设置属性rowFactory的值。
        Property description:
        一个生成TreeTableRow的函数。 该系统负责重用TreeTableRows。 从此函数返回一个TreeTableRow,它可能可用于在TableView中表示单个行。

        请注意,TreeTableRow 不是 TableCell。 TreeTableRow只是一个TableCell的容器,在大多数情况下,您更有可能创建自定义TableCells而不是TreeTableRows。 创建自定义TreeTableRow实例的主要用例很可能是引入某种形式的列跨越支持。

        您可以通过将适当的函数分配给TreeTableColumn类中的cellFactory属性来创建每个列的自定义TableCell实例。

      • getRowFactory

        public final Callback<TreeTableView<S>,TreeTableRow<S>> getRowFactory​()
        获取属性rowFactory的值。
        Property description:
        一个生成TreeTableRow的函数。 该系统负责重用TreeTableRows。 从此函数返回一个TreeTableRow,它可能可用于在TableView中表示单个行。

        请注意,TreeTableRow 不是 TableCell。 TreeTableRow只是一个TableCell的容器,在大多数情况下,您更有可能创建自定义TableCells而不是TreeTableRows。 创建自定义TreeTableRow实例的主要用例很可能是引入某种形式的列跨越支持。

        您可以通过将适当的函数分配给TreeTableColumn类中的cellFactory属性来创建每个列的自定义TableCell实例。

      • placeholderProperty

        public final ObjectProperty<Node> placeholderProperty​()
        当表没有显示的内容时,向用户显示该节点。 新新新新旗新新新旗新新旗新新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗旗新新旗新新旗新新旗新新旗新新旗新200新新旗新新旗新新旗新新旗新新旗新200新新旗新新200新新旗新新200新新旗新新200新200新新旗新新200新新旗2001-新新新新旗新新200新新200新200新新200新新200新200新新200新新200新新200新新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新
        另请参见:
        getPlaceholder()setPlaceholder(Node)
      • setPlaceholder

        public final void setPlaceholder​(Node value)
        设置属性占位符的值。
        Property description:
        当表没有显示的内容时,向用户显示该节点。 新新新新旗新新新旗新新旗新新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗旗新新旗新新旗新新旗新新旗新新旗新200新新旗新新旗新新旗新新旗新新旗新200新新旗新新200新新旗新新200新新旗新新200新200新新旗新新200新新旗2001-新新新新旗新新200新新200新200新新200新新200新200新新200新新200新新200新新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新
      • getPlaceholder

        public final Node getPlaceholder​()
        获取属性占位符的值。
        Property description:
        当表没有显示的内容时,向用户显示该节点。 新新新新旗新新新旗新新旗新新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗旗新新旗新新旗新新旗新新旗新新旗新200新新旗新新旗新新旗新新旗新新旗新200新新旗新新200新新旗新新200新新旗新新200新200新新旗新新200新新旗2001-新新新新旗新新200新新200新200新新200新新200新200新新200新新200新新200新新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新
      • setFixedCellSize

        public final void setFixedCellSize​(double value)
        设置此控件的新固定单元格大小。 任何大于零的值将启用固定的单元大小模式,而零值或负值(或Region.USE_COMPUTED_SIZE)将用于禁用固定单元大小模式。
        参数
        value - 新的固定单元格大小值,或小于或等于零(或Region.USE_COMPUTED_SIZE)的值禁用。
        从以下版本开始:
        JavaFX 8.0
      • getFixedCellSize

        public final double getFixedCellSize​()
        返回固定的单元格大小值。 使用小于或等于零的值来表示禁用固定单元大小模式,大于零的值表示此控件中所有单元格的大小。
        结果
        表示该控件的固定单元大小的double,或者如果固定单元大小模式被禁用,小于或等于零的值。
        从以下版本开始:
        JavaFX 8.0
      • fixedCellSizeProperty

        public final DoubleProperty fixedCellSizeProperty​()
        指定此控件是否具有固定高度(指定值)的单元格。 如果该值小于或等于零,则所有单元格都被单独设置和定位。 这是一个缓慢的操作。 因此,当性能重要且开发人员不依赖于可变单元大小时,设置固定单元大小值是一个好主意。 一般情况下,单元格大约为24像素,因此设置固定的单元格大小为24可能导致视觉差异很小,但性能有所改善。

        要通过CSS设置此属性,请使用-fx-fixed-cell-size属性。 这不应该与-fx-cell-size属性混淆。 这两个CSS属性之间的区别是-fx-cell-size将所有单元格的大小设置为指定的大小,但不会强制这是唯一的大小(从而允许变量单元大小,并且阻止性能提升可能)。 因此,当性能很重要的时候使用-fx-fixed-cell-size,而不是-fx-cell-size。 如果在CSS中指定了两个属性,则-fx-fixed-cell-size优先。

        从以下版本开始:
        JavaFX 8.0
        另请参见:
        getFixedCellSize()setFixedCellSize(double)
      • setSortMode

        public final void setSortMode​(TreeSortMode value)
        设置属性sortMode的值。
        Property description:
        指定在排序此TreeTableView的内容时使用的排序模式,如果在 sort order列表中指定了任何列。
      • getSortMode

        public final TreeSortMode getSortMode​()
        获取属性sortMode的值。
        Property description:
        指定在排序此TreeTableView的内容时使用的排序模式,如果在 sort order列表中指定了任何列。
      • getComparator

        public final Comparator<TreeItem<S>> getComparator​()
        获取属性比较器的值。
        Property description:
        比较器属性是一个只读属性,代表sort order列表的当前状态。 排序顺序列表包含以编程方式添加的列或通过用户单击标题本身的列。
      • setSortPolicy

        public final void setSortPolicy​(Callback<TreeTableView<S>,Boolean> callback)
        设置属性sortPolicy的值。
        Property description:
        排序策略指定如何执行此TreeTableView中的排序。 例如,基本排序策略可能只是递归地分类根树项目的子节点,而更高级的排序策略可以调用数据库来在服务器端执行必要的排序。

        TreeTableView附带了一个default sort policy ,正如上面提到的那样:它只是尝试在原位分类树层次结构。

        建议不要覆盖sort方法,而是提供不同的排序策略。

      • getSortPolicy

        public final Callback<TreeTableView<S>,Boolean> getSortPolicy​()
        获取属性sortPolicy的值。
        Property description:
        排序策略指定如何执行此TreeTableView中的排序。 例如,基本排序策略可能只是递归地分类根树项目的子节点,而更高级的排序策略可以调用数据库来在服务器端执行必要的排序。

        TreeTableView配有一个default sort policy ,正如上面提到的那样:它只是尝试将树层次结构排列在原位。

        建议不要覆盖提供不同排序策略的sort方法。

      • sortPolicyProperty

        public final ObjectProperty<Callback<TreeTableView<S>,Boolean>> sortPolicyProperty​()
        排序策略指定如何执行此TreeTableView中的排序。 例如,基本排序策略可能只是递归地分类根树项目的子节点,而更高级的排序策略可以调用数据库来在服务器端执行必要的排序。

        TreeTableView配有一个default sort policy ,正如上面提到的那样:它只是尝试在原位分类树层次结构。

        建议不要覆盖sort方法,而不是提供不同的排序策略。

        另请参见:
        getSortPolicy()setSortPolicy(Callback)
      • setOnSort

        public void setOnSort​(EventHandler<SortEvent<TreeTableView<S>>> value)
        设置属性onSort的值。
        Property description:
        当有请求排序控件时调用。
      • layoutChildren

        protected void layoutChildren​()
        在布局传递过程中调用这个Parent的孩子。 默认情况下,它只会将受管理的可调整大小的内容的大小设置为其首选大小,并且不会执行任何节点定位。

        子类应该根据需要重写此函数以布局内容。

        重写:
        layoutChildrenControl
      • scrollTo

        public void scrollTo​(int index)
        滚动TreeTableView,使给定索引中的项目对最终用户可见。
        参数
        index - 应该对用户可见的索引,假定它大于或等于0,小于TreeTableView中可见项的数量。
      • scrollToColumn

        public void scrollToColumn​(TreeTableColumn<S,?> column)
        滚动TreeTableView,使给定的列在视口内可见。
        参数
        column - 应该对用户可见的列。
      • scrollToColumnIndex

        public void scrollToColumnIndex​(int columnIndex)
        滚动TreeTableView,使给定的索引在视口内可见。
        参数
        columnIndex - 应该对用户可见的列的索引。
      • getRow

        public int getRow​(TreeItem<S> item)
        返回给定TreeItem的索引位置,假设它目前可通过树层次结构访问(最显着的是所有父树项目都被扩展)。 如果父树项目被折叠,则结果是该方法将返回-1以指示树中不可访问给定树项。
        参数
        item - 寻找索引的TreeItem。
        结果
        表示给定TreeItem的第一个实例的当前TreeTableView中的位置的整数,如果为null或无法找到,则为-1(例如,如果父(一直到根)已折叠)。
      • getTreeItem

        public TreeItem<S> getTreeItem​(int row)
        返回给定索引中的TreeItem,如果超出范围则返回null。
        参数
        row - 正在寻找TreeItem的索引。
        结果
        给定索引中的TreeItem,如果超出范围,则为null。
      • getTreeItemLevel

        public int getTreeItemLevel​(TreeItem<?> node)
        根据getParent()可以递归调用的次数,返回给定TreeItem的“缩进”级别数。 如果给定的TreeItem是此TreeTableView的根节点,或者如果TreeItem没有任何父集,则返回的值将为零。 对于每次递归调用getParent(),返回的值都将增加1。
        参数
        node - 需要级别的TreeItem。
        结果
        表示给定节点上父节点数的整数,如果给定的TreeItem为空,则为-1。
      • getColumns

        public final ObservableList<TreeTableColumn<S,?>> getColumns​()
        作为TableView的一部分的TreeTableColumns。 当用户重新排列TableView列时,此列表将被更新以反映当前的视觉排序。

        注意:要在TableView中显示任何数据,该ObservableList中必须至少有一个TreeTableColumn。

        结果
        表格列
      • getSortOrder

        public final ObservableList<TreeTableColumn<S,?>> getSortOrder​()
        sortOrder列表定义TreeTableColumn实例进行排序的顺序。 一个空的排序列表表示在TableView上没有应用排序。 如果sortOrder列表中有一个TreeTableColumn,则TableView将使用此TreeTableColumn的sortTypecomparator属性进行排序(假设为TreeTableColumn.sortable )。 如果sortOrder列表包含多个TreeTableColumn实例,则首先根据第一个TreeTableColumn的属性对TableView进行排序。 如果两个元素被认为是相等的,则列表中的第二个TreeTableColumn用于确定排序。 如果需要,将重复此循环,直到所有TreeTableColumn比较器的结果被考虑为止。
        结果
        一个包含零个或多个TreeTableColumn实例的ObservableList。
      • resizeColumn

        public boolean resizeColumn​(TreeTableColumn<S,?> column,
                                    double delta)
        根据给定的列应用当前安装的大小调整策略,根据提供的增量值调整其大小。
        参数
        column - 列
        delta - 三角洲
        结果
        如果应用列调整大小,则为true
      • edit

        public void edit​(int row,
                         TreeTableColumn<S,?> column)
        导致给定行/列视图索引处的单元格切换到其编辑状态(如果尚未存在),并且假设TableView和列也是可编辑的。
        参数
        row - 行
        column - 列
      • getVisibleLeafColumns

        public ObservableList<TreeTableColumn<S,?>> getVisibleLeafColumns​()
        返回一个不可修改的列表,其中包含当前可见的叶子列。
        结果
        一个包含当前可见的叶子列的不可修改的列表
      • getVisibleLeafIndex

        public int getVisibleLeafIndex​(TreeTableColumn<S,?> column)
        相对于所有其他可见的叶子列,返回给定列的位置。
        参数
        column - 列
        结果
        相对于所有其他可见叶列,给定列的位置
      • getVisibleLeafColumn

        public TreeTableColumn<S,?> getVisibleLeafColumn​(int column)
        相对于所有其他可见的叶子列,返回给定列索引中的TreeTableColumn。
        参数
        column - 列
        结果
        相对于所有其他可见的叶子列,给定列索引中的TreeTableColumn
      • sort

        public void sort​()
        排序方法强制TreeTableView重新运行其排序算法。 往往不是没有必要直接调用该方法,当它被自动调用sort ordersort policy ,或TreeTableColumn的状态sort type性质发生变化。 换句话说,这种方法只能在需要外部更改和排序时直接调用。
      • refresh

        public void refresh​()
        调用refresh()强制TreeTableView控件重新创建并重新填充填充控件的可视边界所需的单元格。 换句话说,这将强制TreeTableView更新它向用户显示的内容。 这在底层数据源以TreeTableView本身未观察到的方式发生更改的情况下很有用。
        从以下版本开始:
        JavaFX 8u60
      • getClassCssMetaData

        public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData​()
        结果
        与此类相关联的CssMetaData可能包括其类的CssMetaData。
      • createDefaultSkin

        protected Skin<?> createDefaultSkin​()
        为此控件创建一个新的默认皮肤实例。 如果没有通过CSS -fx-skin提供皮肤,或者在具有setSkin(...)的子类中显式设置,则调用此控件创建皮肤。
        重写:
        createDefaultSkinControl
        结果
        此控件的默认皮肤的新实例。 如果为null,则控件将没有皮肤,除非由css提供。
      • queryAccessibleAttribute

        public Object queryAccessibleAttribute​(AccessibleAttribute attribute,
                                               Object... parameters)
        该方法由辅助技术调用以请求属性的值。

        子类通常覆盖此方法来实现特定角色所需的属性。
        如果未处理特定属性,则必须调用超类实现。

        重写:
        queryAccessibleAttributeControl
        参数
        attribute - 请求的属性
        parameters - 可选参数列表
        结果
        请求的属性的值
        另请参见:
        AccessibleAttribute