Module javafx.controls
Package javafx.scene.control

# Class TreeTableColumn<S,T>

java.lang.Object
javafx.scene.control.TableColumnBase<TreeItem<S>,T>
javafx.scene.control.TreeTableColumn<S,T>

Type Parameters:
  `S` - The type of the TableView generic type (i.e. S == TableView<S>)
  `T` - The type of the content in all cells in this TableColumn.

All Implemented Interfaces:
  `Styleable`, `EventTarget`

public class TreeTableColumn<S,T> extends TableColumnBase<TreeItem<S>,T> implements EventTarget
A `TreeTableView` is made up of a number of TreeTableColumn instances. Each TreeTableColumn in a `TreeTableView` is responsible for displaying (and editing) the contents of that column. As well as being responsible for displaying and editing data for a single column, a TreeTableColumn also contains the necessary properties to:

- Be resized (using `minWidth`/ `prefWidth`/ `maxWidth` and `width` properties)
- Have its `visibility` toggled
- Display `header text`
- Display any `nested columns` it may contain
- Have a `context menu` when the user right-clicks the column header area
- Have the contents of the table be sorted (using `comparator`, `sortable` and `sortType`)

When creating a TreeTableColumn instance, perhaps the two most important properties to set are the column `text` (what to show in the column header area), and the column `cell value factory` (which is used to populate individual cells in the column). This can be achieved using some variation on the following code:

     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();
         }
      });
     }

This approach assumes that the object returned from `p.getValue().getValue()` has a JavaFX `ObservableValue` that can simply be returned. The benefit of this is that the TableView will internally create bindings to ensure that, should the returned `ObservableValue` change, the cell contents will be automatically refreshed.

In situations where a TableColumn must interact with classes created before JavaFX, or that generally do not wish to use JavaFX APIs for properties, it is possible to wrap the returned value in a `ReadOnlyObjectWrapper` instance. For example:

     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 new ReadOnlyObjectWrapper(p.getValue().getValue().getFirstName());
         }
      });
     }

It is hoped that over time there will be convenience cell value factories developed and made available to developers. As of the JavaFX 2.0 release, there is one such convenience class: `TreeItemPropertyValueFactory`. This class removes the need to write the code above, instead relying on reflection to look up a given property from a String. Refer to the `TreeItemPropertyValueFactory` class documentation for more information on how to use this with a TableColumn. Finally, for more detail on how to use TableColumn, there is further documentation in the `TableView` class documentation.

Since:
  JavaFX 8.0
See Also:
  - `TableView`
  - `TableCell`
  - `TablePosition`
  - `TreeItemPropertyValueFactory`

- ## Property Summary

  Properties
  Type
  Property
  Description
  `final ObjectProperty<Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>>`
  `cellFactory`
  The cell factory for all cells in this column.
  `final ObjectProperty<Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>>>`
  `cellValueFactory`
  The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditCancel`
  This event handler will be fired when the user cancels editing a cell.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditCommit`
  This event handler will be fired when the user successfully commits their editing.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditStart`
  This event handler will be fired when the user successfully initiates editing.
  `final ObjectProperty<TreeTableColumn.SortType>`
  `sortType`
  Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order.
  `final ReadOnlyObjectProperty<TreeTableView<S>>`
  `treeTableView`
  The TreeTableView that this TreeTableColumn belongs to.

  ### Properties declared in class javafx.scene.control.TableColumnBase

  `comparator, contextMenu, editable, graphic, id, maxWidth, minWidth, parentColumn, prefWidth, reorderable, resizable, sortable, sortNode, style, text, visible, width`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `TreeTableColumn.CellDataFeatures<S,T>`
  A support class used in TreeTableColumn as a wrapper class to provide all necessary information for a particular `Cell`.
  `static class`
  `TreeTableColumn.CellEditEvent<S,T>`
  An event that is fired when a user performs an edit on a table cell.
  `static enum`
  `TreeTableColumn.SortType`
  Enumeration that specifies the type of sorting being applied to a specific column.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final Callback<TreeTableColumn<?,?>,TreeTableCell<?,?>>`
  `DEFAULT_CELL_FACTORY`
  If no cellFactory is specified on a TreeTableColumn instance, then this one will be used by default.

  ### Fields declared in class javafx.scene.control.TableColumnBase

  `DEFAULT_COMPARATOR`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TreeTableColumn()`
  Creates a default TreeTableColumn with default cell factory, comparator, and onEditCommit implementation.
  `TreeTableColumn(String text)`
  Creates a TreeTableColumn with the text set to the provided string, with default cell factory, comparator, and onEditCommit implementation.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final ObjectProperty<Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>>`
  `cellFactoryProperty()`
  The cell factory for all cells in this column.
  `final ObjectProperty<Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>>>`
  `cellValueFactoryProperty()`
  The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn.
  `static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>>`
  `editAnyEvent()`
  Parent event for any TreeTableColumn edit event.
  `static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>>`
  `editCancelEvent()`
  Indicates that the editing has been canceled, meaning that no change should be made to the backing data source.
  `static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>>`
  `editCommitEvent()`
  Indicates that the editing has been committed by the user, meaning that a change should be made to the backing data source to reflect the new data.
  `static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>>`
  `editStartEvent()`
  Indicates that the user has performed some interaction to start an edit event, or alternatively the `TreeTableView.edit(int, javafx.scene.control.TreeTableColumn)` method has been called.
  `final Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>`
  `getCellFactory()`
  Gets the value of the `cellFactory` property.
  `final ObservableValue<T>`
  `getCellObservableValue(int index)`
  Attempts to return an ObservableValue<T> for the item in the given index (which is of type S).
  `final ObservableValue<T>`
  `getCellObservableValue(TreeItem<S> item)`
  Attempts to return an ObservableValue<T> for the given item (which is of type S).
  `final Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>>`
  `getCellValueFactory()`
  Gets the value of the `cellValueFactory` property.
  `static List<CssMetaData<? extends Styleable,?>>`
  `getClassCssMetaData()`
  Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses.
  `final ObservableList<TreeTableColumn<S,?>>`
  `getColumns()`
  This enables support for nested columns, which can be useful to group together related data.
  `List<CssMetaData<? extends Styleable,?>>`
  `getCssMetaData()`
  The CssMetaData of this Styleable.
  `final EventHandler<TreeTableColumn.CellEditEvent<S,T>>`
  `getOnEditCancel()`
  Gets the value of the `onEditCancel` property.
  `final EventHandler<TreeTableColumn.CellEditEvent<S,T>>`
  `getOnEditCommit()`
  Gets the value of the `onEditCommit` property.
  `final EventHandler<TreeTableColumn.CellEditEvent<S,T>>`
  `getOnEditStart()`
  Gets the value of the `onEditStart` property.
  `final TreeTableColumn.SortType`
  `getSortType()`
  Gets the value of the `sortType` property.
  `Styleable`
  `getStyleableParent()`
  Return the parent of this Styleable, or null if there is no parent.
  `final TreeTableView<S>`
  `getTreeTableView()`
  Gets the value of the `treeTableView` property.
  `String`
  `getTypeSelector()`
  The type of this `Styleable` that is to be used in selector matching.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditCancelProperty()`
  This event handler will be fired when the user cancels editing a cell.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditCommitProperty()`
  This event handler will be fired when the user successfully commits their editing.
  `final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>>`
  `onEditStartProperty()`
  This event handler will be fired when the user successfully initiates editing.
  `final void`
  `setCellFactory(Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>> value)`
  Sets the value of the `cellFactory` property.
  `final void`
  `setCellValueFactory(Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>> value)`
  Sets the value of the `cellValueFactory` property.
  `final void`
  `setOnEditCancel(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)`
  Sets the value of the `onEditCancel` property.
  `final void`
  `setOnEditCommit(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)`
  Sets the value of the `onEditCommit` property.
  `final void`
  `setOnEditStart(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)`
  Sets the value of the `onEditStart` property.
  `final void`
  `setSortType(TreeTableColumn.SortType value)`
  Sets the value of the `sortType` property.
  `final ObjectProperty<TreeTableColumn.SortType>`
  `sortTypeProperty()`
  Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order.
  `final ReadOnlyObjectProperty<TreeTableView<S>>`
  `treeTableViewProperty()`
  The TreeTableView that this TreeTableColumn belongs to.

  ### Methods declared in class javafx.scene.control.TableColumnBase

  `buildEventDispatchChain, comparatorProperty, contextMenuProperty, editableProperty, getCellData, getCellData, getComparator, getContextMenu, getGraphic, getId, getMaxWidth, getMinWidth, getParentColumn, getPrefWidth, getProperties, getPseudoClassStates, getSortNode, getStyle, getStyleClass, getText, getUserData, getWidth, graphicProperty, hasProperties, idProperty, isEditable, isReorderable, isResizable, isSortable, isVisible, maxWidthProperty, minWidthProperty, parentColumnProperty, prefWidthProperty, reorderableProperty, resizableProperty, setComparator, setContextMenu, setEditable, setGraphic, setId, setMaxWidth, setMinWidth, setPrefWidth, setReorderable, setResizable, setSortable, setSortNode, setStyle, setText, setUserData, setVisible, sortableProperty, sortNodeProperty, styleProperty, textProperty, visibleProperty, widthProperty`

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods declared in interface javafx.event.EventTarget

  `addEventFilter, addEventHandler, buildEventDispatchChain, removeEventFilter, removeEventHandler`

  ### Methods declared in interface javafx.css.Styleable

  `getStyleableNode`

- ## Property Details

  - ### treeTableView

    public final ReadOnlyObjectProperty<TreeTableView<S>> treeTableViewProperty
    The TreeTableView that this TreeTableColumn belongs to.
    See Also:
      - `getTreeTableView()`
      - `treeTableViewProperty()`

  - ### cellValueFactory

    public final ObjectProperty<Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>>> cellValueFactoryProperty
    The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn. A cell value factory is a `Callback` that provides a `TreeTableColumn.CellDataFeatures` instance, and expects an `ObservableValue` to be returned. The returned ObservableValue instance will be observed internally to allow for updates to the value to be immediately reflected on screen.

    An example of how to set a cell value factory is:

         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();
             }
          });
         }

    A common approach is to want to populate cells in a TreeTableColumn using a single value from a Java bean. To support this common scenario, there is the `TreeItemPropertyValueFactory` class. Refer to this class for more information on how to use it, but briefly here is how the above use case could be simplified using the TreeItemPropertyValueFactory class:

         firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("firstName"));

    See Also:
      - `getCellValueFactory()`
      - `setCellValueFactory(Callback)`
      - `cellValueFactoryProperty()`

  - ### cellFactory

    public final ObjectProperty<Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>> cellFactoryProperty
    The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within each TreeTableCell for a single TreeTableColumn.

    By default TreeTableColumn uses a `default cell factory`, but this can be replaced with a custom implementation, for example to show data in a different way or to support editing. There is a lot of documentation on creating custom cell factories elsewhere (see `Cell` and `TreeTableView` for example).

    Finally, there are a number of pre-built cell factories available in the `javafx.scene.control.cell` package.

    See Also:
      - `getCellFactory()`
      - `setCellFactory(Callback)`
      - `cellFactoryProperty()`

  - ### sortType

    public final ObjectProperty<TreeTableColumn.SortType> sortTypeProperty
    Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order. Simply toggling this property will result in the sort order changing in the TreeTableView, assuming of course that this column is in the sortOrder ObservableList to begin with.
    See Also:
      - `getSortType()`
      - `setSortType(TreeTableColumn.SortType)`
      - `sortTypeProperty()`

  - ### onEditStart

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditStartProperty
    This event handler will be fired when the user successfully initiates editing.
    See Also:
      - `getOnEditStart()`
      - `setOnEditStart(EventHandler)`
      - `onEditStartProperty()`

  - ### onEditCommit

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditCommitProperty
    This event handler will be fired when the user successfully commits their editing.
    See Also:
      - `getOnEditCommit()`
      - `setOnEditCommit(EventHandler)`
      - `onEditCommitProperty()`

  - ### onEditCancel

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditCancelProperty
    This event handler will be fired when the user cancels editing a cell.
    See Also:
      - `getOnEditCancel()`
      - `setOnEditCancel(EventHandler)`
      - `onEditCancelProperty()`

- ## Field Details

  - ### DEFAULT_CELL_FACTORY

    public static final Callback<TreeTableColumn<?,?>,TreeTableCell<?,?>> DEFAULT_CELL_FACTORY
    If no cellFactory is specified on a TreeTableColumn instance, then this one will be used by default. At present it simply renders the TableCell item property within the `graphic` property if the `item` is a Node, or it simply calls `toString()` if it is not null, setting the resulting string inside the `text` property.

- ## Constructor Details

  - ### TreeTableColumn

    public TreeTableColumn()
    Creates a default TreeTableColumn with default cell factory, comparator, and onEditCommit implementation.

  - ### TreeTableColumn

    public TreeTableColumn(String text)
    Creates a TreeTableColumn with the text set to the provided string, with default cell factory, comparator, and onEditCommit implementation.
    Parameters:
      `text` - The string to show when the TreeTableColumn is placed within the TreeTableView.

- ## Method Details

  - ### editAnyEvent

    public static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>> editAnyEvent()
    Parent event for any TreeTableColumn edit event.
    Type Parameters:
      `S` - the type of the TreeTableView generic type
      `T` - the type of the content in all cells in this TreeTableColumn
    Returns:
      the edit event

  - ### editStartEvent

    public static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>> editStartEvent()
    Indicates that the user has performed some interaction to start an edit event, or alternatively the `TreeTableView.edit(int, javafx.scene.control.TreeTableColumn)` method has been called.
    Type Parameters:
      `S` - the type of the TreeTableView generic type
      `T` - the type of the content in all cells in this TreeTableColumn
    Returns:
      the edit start event

  - ### editCancelEvent

    public static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>> editCancelEvent()
    Indicates that the editing has been canceled, meaning that no change should be made to the backing data source.
    Type Parameters:
      `S` - the type of the TreeTableView generic type
      `T` - the type of the content in all cells in this TreeTableColumn
    Returns:
      the edit cancel event

  - ### editCommitEvent

    public static <S, T> EventType<TreeTableColumn.CellEditEvent<S,T>> editCommitEvent()
    Indicates that the editing has been committed by the user, meaning that a change should be made to the backing data source to reflect the new data.
    Type Parameters:
      `S` - the type of the TreeTableView generic type
      `T` - the type of the content in all cells in this TreeTableColumn
    Returns:
      the edit commit event

  - ### treeTableViewProperty

    public final ReadOnlyObjectProperty<TreeTableView<S>> treeTableViewProperty()
    The TreeTableView that this TreeTableColumn belongs to.
    Returns:
      the `treeTableView` property
    See Also:
      - `getTreeTableView()`

  - ### getTreeTableView

    public final TreeTableView<S> getTreeTableView()
    Gets the value of the `treeTableView` property.
    Property description:
      The TreeTableView that this TreeTableColumn belongs to.
    Returns:
      the value of the `treeTableView` property
    See Also:
      - `treeTableViewProperty()`

  - ### setCellValueFactory

    public final void setCellValueFactory(Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>> value)
    Sets the value of the `cellValueFactory` property.
    Property description:
      The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn. A cell value factory is a `Callback` that provides a `TreeTableColumn.CellDataFeatures` instance, and expects an `ObservableValue` to be returned. The returned ObservableValue instance will be observed internally to allow for updates to the value to be immediately reflected on screen.

      An example of how to set a cell value factory is:

           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();
               }
            });
           }

      A common approach is to want to populate cells in a TreeTableColumn using a single value from a Java bean. To support this common scenario, there is the `TreeItemPropertyValueFactory` class. Refer to this class for more information on how to use it, but briefly here is how the above use case could be simplified using the TreeItemPropertyValueFactory class:

           firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("firstName"));

    Parameters:
      `value` - the value for the `cellValueFactory` property
    See Also:
      - `getCellValueFactory()`
      - `cellValueFactoryProperty()`

  - ### getCellValueFactory

    public final Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>> getCellValueFactory()
    Gets the value of the `cellValueFactory` property.
    Property description:
      The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn. A cell value factory is a `Callback` that provides a `TreeTableColumn.CellDataFeatures` instance, and expects an `ObservableValue` to be returned. The returned ObservableValue instance will be observed internally to allow for updates to the value to be immediately reflected on screen.

      An example of how to set a cell value factory is:

           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();
               }
            });
           }

      A common approach is to want to populate cells in a TreeTableColumn using a single value from a Java bean. To support this common scenario, there is the `TreeItemPropertyValueFactory` class. Refer to this class for more information on how to use it, but briefly here is how the above use case could be simplified using the TreeItemPropertyValueFactory class:

           firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("firstName"));

    Returns:
      the value of the `cellValueFactory` property
    See Also:
      - `setCellValueFactory(Callback)`
      - `cellValueFactoryProperty()`

  - ### cellValueFactoryProperty

    public final ObjectProperty<Callback<TreeTableColumn.CellDataFeatures<S,T>,ObservableValue<T>>> cellValueFactoryProperty()
    The cell value factory needs to be set to specify how to populate all cells within a single TreeTableColumn. A cell value factory is a `Callback` that provides a `TreeTableColumn.CellDataFeatures` instance, and expects an `ObservableValue` to be returned. The returned ObservableValue instance will be observed internally to allow for updates to the value to be immediately reflected on screen.

    An example of how to set a cell value factory is:

         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();
             }
          });
         }

    A common approach is to want to populate cells in a TreeTableColumn using a single value from a Java bean. To support this common scenario, there is the `TreeItemPropertyValueFactory` class. Refer to this class for more information on how to use it, but briefly here is how the above use case could be simplified using the TreeItemPropertyValueFactory class:

         firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("firstName"));

    Returns:
      the `cellValueFactory` property
    See Also:
      - `getCellValueFactory()`
      - `setCellValueFactory(Callback)`

  - ### setCellFactory

    public final void setCellFactory(Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>> value)
    Sets the value of the `cellFactory` property.
    Property description:
      The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within each TreeTableCell for a single TreeTableColumn.

      By default TreeTableColumn uses a `default cell factory`, but this can be replaced with a custom implementation, for example to show data in a different way or to support editing. There is a lot of documentation on creating custom cell factories elsewhere (see `Cell` and `TreeTableView` for example).

      Finally, there are a number of pre-built cell factories available in the `javafx.scene.control.cell` package.

    Parameters:
      `value` - the value for the `cellFactory` property
    See Also:
      - `getCellFactory()`
      - `cellFactoryProperty()`

  - ### getCellFactory

    public final Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>> getCellFactory()
    Gets the value of the `cellFactory` property.
    Property description:
      The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within each TreeTableCell for a single TreeTableColumn.

      By default TreeTableColumn uses a `default cell factory`, but this can be replaced with a custom implementation, for example to show data in a different way or to support editing. There is a lot of documentation on creating custom cell factories elsewhere (see `Cell` and `TreeTableView` for example).

      Finally, there are a number of pre-built cell factories available in the `javafx.scene.control.cell` package.

    Returns:
      the value of the `cellFactory` property
    See Also:
      - `setCellFactory(Callback)`
      - `cellFactoryProperty()`

  - ### cellFactoryProperty

    public final ObjectProperty<Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>> cellFactoryProperty()
    The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within each TreeTableCell for a single TreeTableColumn.

    By default TreeTableColumn uses a `default cell factory`, but this can be replaced with a custom implementation, for example to show data in a different way or to support editing. There is a lot of documentation on creating custom cell factories elsewhere (see `Cell` and `TreeTableView` for example).

    Finally, there are a number of pre-built cell factories available in the `javafx.scene.control.cell` package.

    Returns:
      the `cellFactory` property
    See Also:
      - `getCellFactory()`
      - `setCellFactory(Callback)`

  - ### sortTypeProperty

    public final ObjectProperty<TreeTableColumn.SortType> sortTypeProperty()
    Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order. Simply toggling this property will result in the sort order changing in the TreeTableView, assuming of course that this column is in the sortOrder ObservableList to begin with.
    Returns:
      the `sortType` property
    See Also:
      - `getSortType()`
      - `setSortType(TreeTableColumn.SortType)`

  - ### setSortType

    public final void setSortType(TreeTableColumn.SortType value)
    Sets the value of the `sortType` property.
    Property description:
      Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order. Simply toggling this property will result in the sort order changing in the TreeTableView, assuming of course that this column is in the sortOrder ObservableList to begin with.
    Parameters:
      `value` - the value for the `sortType` property
    See Also:
      - `getSortType()`
      - `sortTypeProperty()`

  - ### getSortType

    public final TreeTableColumn.SortType getSortType()
    Gets the value of the `sortType` property.
    Property description:
      Used to state whether this column, if it is part of a sort order (see `TreeTableView.getSortOrder()` for more details), should be sorted in ascending or descending order. Simply toggling this property will result in the sort order changing in the TreeTableView, assuming of course that this column is in the sortOrder ObservableList to begin with.
    Returns:
      the value of the `sortType` property
    See Also:
      - `setSortType(TreeTableColumn.SortType)`
      - `sortTypeProperty()`

  - ### setOnEditStart

    public final void setOnEditStart(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)
    Sets the value of the `onEditStart` property.
    Property description:
      This event handler will be fired when the user successfully initiates editing.
    Parameters:
      `value` - the value for the `onEditStart` property
    See Also:
      - `getOnEditStart()`
      - `onEditStartProperty()`

  - ### getOnEditStart

    public final EventHandler<TreeTableColumn.CellEditEvent<S,T>> getOnEditStart()
    Gets the value of the `onEditStart` property.
    Property description:
      This event handler will be fired when the user successfully initiates editing.
    Returns:
      the value of the `onEditStart` property
    See Also:
      - `setOnEditStart(EventHandler)`
      - `onEditStartProperty()`

  - ### onEditStartProperty

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditStartProperty()
    This event handler will be fired when the user successfully initiates editing.
    Returns:
      the `onEditStart` property
    See Also:
      - `getOnEditStart()`
      - `setOnEditStart(EventHandler)`

  - ### setOnEditCommit

    public final void setOnEditCommit(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)
    Sets the value of the `onEditCommit` property.
    Property description:
      This event handler will be fired when the user successfully commits their editing.
    Parameters:
      `value` - the value for the `onEditCommit` property
    See Also:
      - `getOnEditCommit()`
      - `onEditCommitProperty()`

  - ### getOnEditCommit

    public final EventHandler<TreeTableColumn.CellEditEvent<S,T>> getOnEditCommit()
    Gets the value of the `onEditCommit` property.
    Property description:
      This event handler will be fired when the user successfully commits their editing.
    Returns:
      the value of the `onEditCommit` property
    See Also:
      - `setOnEditCommit(EventHandler)`
      - `onEditCommitProperty()`

  - ### onEditCommitProperty

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditCommitProperty()
    This event handler will be fired when the user successfully commits their editing.
    Returns:
      the `onEditCommit` property
    See Also:
      - `getOnEditCommit()`
      - `setOnEditCommit(EventHandler)`

  - ### setOnEditCancel

    public final void setOnEditCancel(EventHandler<TreeTableColumn.CellEditEvent<S,T>> value)
    Sets the value of the `onEditCancel` property.
    Property description:
      This event handler will be fired when the user cancels editing a cell.
    Parameters:
      `value` - the value for the `onEditCancel` property
    See Also:
      - `getOnEditCancel()`
      - `onEditCancelProperty()`

  - ### getOnEditCancel

    public final EventHandler<TreeTableColumn.CellEditEvent<S,T>> getOnEditCancel()
    Gets the value of the `onEditCancel` property.
    Property description:
      This event handler will be fired when the user cancels editing a cell.
    Returns:
      the value of the `onEditCancel` property
    See Also:
      - `setOnEditCancel(EventHandler)`
      - `onEditCancelProperty()`

  - ### onEditCancelProperty

    public final ObjectProperty<EventHandler<TreeTableColumn.CellEditEvent<S,T>>> onEditCancelProperty()
    This event handler will be fired when the user cancels editing a cell.
    Returns:
      the `onEditCancel` property
    See Also:
      - `getOnEditCancel()`
      - `setOnEditCancel(EventHandler)`

  - ### getColumns

    public final ObservableList<TreeTableColumn<S,?>> getColumns()
    This enables support for nested columns, which can be useful to group together related data. For example, we may have a 'Name' column with two nested columns for 'First' and 'Last' names.

    This has no impact on the table as such - all column indices point to the leaf columns only, and it isn't possible to sort using the parent column, just the leaf columns. In other words, this is purely a visual feature.

    Specified by:
      `getColumns` in class `TableColumnBase<TreeItem<S>,T>`
    Returns:
      An ObservableList containing TableColumnBase instances (or subclasses) that are the children of this TableColumnBase. If these children TableColumnBase instances are set as visible, they will appear beneath this table column.

  - ### getCellObservableValue

    public final ObservableValue<T> getCellObservableValue(int index)
    Attempts to return an ObservableValue<T> for the item in the given index (which is of type S). In other words, this method expects to receive an integer value that is greater than or equal to zero, and less than the size of the underlying data model. If the index is valid, this method will return an ObservableValue<T> for this specific column.

    This is achieved by calling the `cell value factory`, and returning whatever it returns when passed a `CellDataFeatures` (see, for example, the CellDataFeatures classes belonging to `TableColumn` and `TreeTableColumn` for more information).

    Specified by:
      `getCellObservableValue` in class `TableColumnBase<TreeItem<S>,T>`
    Parameters:
      `index` - The index of the item (of type S) for which an ObservableValue<T> is sought.
    Returns:
      An ObservableValue<T> for this specific table column.

  - ### getCellObservableValue

    public final ObservableValue<T> getCellObservableValue(TreeItem<S> item)
    Attempts to return an ObservableValue<T> for the given item (which is of type S). In other words, this method expects to receive an object from the underlying data model for the entire 'row' in the table, and it must return an ObservableValue<T> for the value in this specific column.

    This is achieved by calling the `cell value factory`, and returning whatever it returns when passed a `CellDataFeatures` (see, for example, the CellDataFeatures classes belonging to `TableColumn` and `TreeTableColumn` for more information).

    Specified by:
      `getCellObservableValue` in class `TableColumnBase<TreeItem<S>,T>`
    Parameters:
      `item` - The item (of type S) for which an ObservableValue<T> is sought.
    Returns:
      An ObservableValue<T> for this specific table column.

  - ### getTypeSelector

    public String getTypeSelector()
    The type of this `Styleable` that is to be used in selector matching. This is analogous to an "element" in HTML. (CSS Type Selector).
    Specified by:
      `getTypeSelector` in interface `Styleable`
    Returns:
      "TreeTableColumn"

  - ### getStyleableParent

    public Styleable getStyleableParent()
    Return the parent of this Styleable, or null if there is no parent.
    Specified by:
      `getStyleableParent` in interface `Styleable`
    Returns:
      `getTreeTableView()`

  - ### getCssMetaData

    public List<CssMetaData<? extends Styleable,?>> getCssMetaData()
    The CssMetaData of this Styleable. This may be returned as an unmodifiable list.
    Specified by:
      `getCssMetaData` in interface `Styleable`
    Returns:
      the CssMetaData

  - ### getClassCssMetaData

    public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData()
    Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses. It is currently an empty list.
    Returns:
      an empty list