- 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
TableView
is made up of a number of TableColumn instances. Each
TableColumn in a table 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 TableColumn also contains the necessary properties to:
- Be resized (using
minWidth
/prefWidth
/maxWidth
andwidth
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
andsortType
)
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:
ObservableList<Person> data = ...
TableView<Person> tableView = new TableView<Person>(data);
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
// p.getValue() returns the Person instance for a particular TableView row
return p.getValue().firstNameProperty();
}
});
tableView.getColumns().add(firstNameCol);}
This approach assumes that the object returned from p.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) {
return new ReadOnlyObjectWrapper(p.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: PropertyValueFactory
. 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
PropertyValueFactory
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 2.0
- See Also:
-
Property Summary
TypePropertyDescriptionfinal ObjectProperty<Callback<TableColumn<S,
T>, TableCell<S, T>>> The cell factory for all cells in this column.The cell value factory needs to be set to specify how to populate all cells within a single TableColumn.This event handler will be fired when the user cancels editing a cell.This event handler will be fired when the user successfully commits their editing.This event handler will be fired when the user successfully initiates editing.Used to state whether this column, if it is part of a sort order (seeTableView.getSortOrder()
for more details), should be sorted in ascending or descending order.final ReadOnlyObjectProperty<TableView<S>>
The TableView that this TableColumn 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
Modifier and TypeClassDescriptionstatic class
A support class used in TableColumn as a wrapper class to provide all necessary information for a particularCell
.static class
An event that is fired when a user performs an edit on a table cell.static enum
Enumeration that specifies the type of sorting being applied to a specific column. -
Field Summary
Modifier and TypeFieldDescriptionstatic final Callback<TableColumn<?,
?>, TableCell<?, ?>> If no cellFactory is specified on a TableColumn instance, then this one will be used by default.Fields declared in class javafx.scene.control.TableColumnBase
DEFAULT_COMPARATOR
-
Constructor Summary
ConstructorDescriptionCreates a default TableColumn with default cell factory, comparator, and onEditCommit implementation.TableColumn
(String text) Creates a TableColumn with the text set to the provided string, with default cell factory, comparator, and onEditCommit implementation. -
Method Summary
Modifier and TypeMethodDescriptionfinal ObjectProperty<Callback<TableColumn<S,
T>, TableCell<S, T>>> The cell factory for all cells in this column.The cell value factory needs to be set to specify how to populate all cells within a single TableColumn.static <S,
T> EventType<TableColumn.CellEditEvent<S, T>> Parent event for any TableColumn edit event.static <S,
T> EventType<TableColumn.CellEditEvent<S, T>> Indicates that the editing has been canceled, meaning that no change should be made to the backing data source.static <S,
T> EventType<TableColumn.CellEditEvent<S, T>> 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<TableColumn.CellEditEvent<S, T>> Indicates that the user has performed some interaction to start an edit event, or alternatively theTableView.edit(int, javafx.scene.control.TableColumn)
method has been called.Gets the value of thecellFactory
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
(S item) Attempts to return an ObservableValue<T> for the given item (which is of type S).final Callback<TableColumn.CellDataFeatures<S,
T>, ObservableValue<T>> Gets the value of thecellValueFactory
property.static List<CssMetaData<? extends Styleable,
?>> Gets theCssMetaData
associated with this class, which may include theCssMetaData
of its superclasses.final ObservableList<TableColumn<S,
?>> This enables support for nested columns, which can be useful to group together related data.List<CssMetaData<? extends Styleable,
?>> The CssMetaData of this Styleable.final EventHandler<TableColumn.CellEditEvent<S,
T>> Gets the value of theonEditCancel
property.final EventHandler<TableColumn.CellEditEvent<S,
T>> Gets the value of theonEditCommit
property.final EventHandler<TableColumn.CellEditEvent<S,
T>> Gets the value of theonEditStart
property.final TableColumn.SortType
Gets the value of thesortType
property.Return the parent of this Styleable, or null if there is no parent.Gets the value of thetableView
property.The type of thisStyleable
that is to be used in selector matching.This event handler will be fired when the user cancels editing a cell.This event handler will be fired when the user successfully commits their editing.This event handler will be fired when the user successfully initiates editing.final void
setCellFactory
(Callback<TableColumn<S, T>, TableCell<S, T>> value) Sets the value of thecellFactory
property.final void
Sets the value of thecellValueFactory
property.final void
Sets the value of theonEditCancel
property.final void
Sets the value of theonEditCommit
property.final void
Sets the value of theonEditStart
property.final void
setSortType
(TableColumn.SortType value) Sets the value of thesortType
property.Used to state whether this column, if it is part of a sort order (seeTableView.getSortOrder()
for more details), should be sorted in ascending or descending order.final ReadOnlyObjectProperty<TableView<S>>
The TableView that this TableColumn belongs to.Methods declared in class javafx.scene.control.TableColumnBase
addEventHandler, 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, removeEventHandler, 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
buildEventDispatchChain
Methods declared in interface javafx.css.Styleable
getStyleableNode
-
Property Details
-
tableView
The TableView that this TableColumn belongs to.- See Also:
-
cellValueFactory
public final ObjectProperty<Callback<TableColumn.CellDataFeatures<S,T>, cellValueFactoryPropertyObservableValue<T>>> The cell value factory needs to be set to specify how to populate all cells within a single TableColumn. A cell value factory is aCallback
that provides aTableColumn.CellDataFeatures
instance, and expects anObservableValue
to be returned. The returned ObservableValue instance will be observed internally to allow for immediate updates to the value to be reflected on screen. An example of how to set a cell value factory is:
A common approach is to want to populate cells in a TableColumn using a single value from a Java bean. To support this common scenario, there is thelastNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { public ObservableValue<String> call(CellDataFeatures<Person, String> p) { // p.getValue() returns the Person instance for a particular TableView row return p.getValue().lastNameProperty(); } }); }
PropertyValueFactory
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 PropertyValueFactory class:lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
-
cellFactory
The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within eachTableCell
for a single table column.By default,
TableColumn
uses thedefault 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 (seeCell
andTableView
for example).Finally, there are a number of pre-built cell factories available in the
javafx.scene.control.cell
package. -
sortType
Used to state whether this column, if it is part of a sort order (seeTableView.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 TableView, assuming of course that this column is in the sortOrder ObservableList to begin with. -
onEditStart
This event handler will be fired when the user successfully initiates editing. -
onEditCommit
This event handler will be fired when the user successfully commits their editing. -
onEditCancel
This event handler will be fired when the user cancels editing a cell.
-
-
Field Details
-
DEFAULT_CELL_FACTORY
If no cellFactory is specified on a TableColumn instance, then this one will be used by default. At present it simply renders the TableCell item property within thegraphic
property if theitem
is a Node, or it simply callstoString()
if it is not null, setting the resulting string inside thetext
property.
-
-
Constructor Details
-
TableColumn
public TableColumn()Creates a default TableColumn with default cell factory, comparator, and onEditCommit implementation. -
TableColumn
Creates a TableColumn with the text set to the provided string, with default cell factory, comparator, and onEditCommit implementation.- Parameters:
text
- The string to show when the TableColumn is placed within the TableView.
-
-
Method Details
-
editAnyEvent
Parent event for any TableColumn edit event.- Type Parameters:
S
- The type of the TableView generic typeT
- The type of the content in all cells in this TableColumn- Returns:
- The any TableColumn edit event
-
editStartEvent
Indicates that the user has performed some interaction to start an edit event, or alternatively theTableView.edit(int, javafx.scene.control.TableColumn)
method has been called.- Type Parameters:
S
- The type of the TableView generic typeT
- The type of the content in all cells in this TableColumn- Returns:
- The start an edit event
-
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 TableView generic typeT
- The type of the content in all cells in this TableColumn- Returns:
- The cancel an edit event
-
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 TableView generic typeT
- The type of the content in all cells in this TableColumn- Returns:
- The commit an edit event
-
tableViewProperty
The TableView that this TableColumn belongs to.- Returns:
- the
tableView
property - See Also:
-
getTableView
Gets the value of thetableView
property.- Property description:
- The TableView that this TableColumn belongs to.
- Returns:
- the value of the
tableView
property - See Also:
-
setCellValueFactory
public final void setCellValueFactory(Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> value) Sets the value of thecellValueFactory
property.- Property description:
- The cell value factory needs to be set to specify how to populate all
cells within a single TableColumn. A cell value factory is a
Callback
that provides aTableColumn.CellDataFeatures
instance, and expects anObservableValue
to be returned. The returned ObservableValue instance will be observed internally to allow for immediate updates to the value to be reflected on screen. An example of how to set a cell value factory is:
A common approach is to want to populate cells in a TableColumn using a single value from a Java bean. To support this common scenario, there is thelastNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { public ObservableValue<String> call(CellDataFeatures<Person, String> p) { // p.getValue() returns the Person instance for a particular TableView row return p.getValue().lastNameProperty(); } }); }
PropertyValueFactory
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 PropertyValueFactory class:lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
- Parameters:
value
- the value for thecellValueFactory
property- See Also:
-
getCellValueFactory
Gets the value of thecellValueFactory
property.- Property description:
- The cell value factory needs to be set to specify how to populate all
cells within a single TableColumn. A cell value factory is a
Callback
that provides aTableColumn.CellDataFeatures
instance, and expects anObservableValue
to be returned. The returned ObservableValue instance will be observed internally to allow for immediate updates to the value to be reflected on screen. An example of how to set a cell value factory is:
A common approach is to want to populate cells in a TableColumn using a single value from a Java bean. To support this common scenario, there is thelastNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { public ObservableValue<String> call(CellDataFeatures<Person, String> p) { // p.getValue() returns the Person instance for a particular TableView row return p.getValue().lastNameProperty(); } }); }
PropertyValueFactory
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 PropertyValueFactory class:lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
- Returns:
- the value of the
cellValueFactory
property - See Also:
-
cellValueFactoryProperty
public final ObjectProperty<Callback<TableColumn.CellDataFeatures<S,T>, cellValueFactoryProperty()ObservableValue<T>>> The cell value factory needs to be set to specify how to populate all cells within a single TableColumn. A cell value factory is aCallback
that provides aTableColumn.CellDataFeatures
instance, and expects anObservableValue
to be returned. The returned ObservableValue instance will be observed internally to allow for immediate updates to the value to be reflected on screen. An example of how to set a cell value factory is:
A common approach is to want to populate cells in a TableColumn using a single value from a Java bean. To support this common scenario, there is thelastNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { public ObservableValue<String> call(CellDataFeatures<Person, String> p) { // p.getValue() returns the Person instance for a particular TableView row return p.getValue().lastNameProperty(); } }); }
PropertyValueFactory
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 PropertyValueFactory class:lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
- Returns:
- the
cellValueFactory
property - See Also:
-
setCellFactory
Sets the value of thecellFactory
property.- Property description:
- The cell factory for all cells in this column. The cell factory
is responsible for rendering the data contained within each
TableCell
for a single table column.By default,
TableColumn
uses thedefault 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 (seeCell
andTableView
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 thecellFactory
property- See Also:
-
getCellFactory
Gets the value of thecellFactory
property.- Property description:
- The cell factory for all cells in this column. The cell factory
is responsible for rendering the data contained within each
TableCell
for a single table column.By default,
TableColumn
uses thedefault 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 (seeCell
andTableView
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:
-
cellFactoryProperty
The cell factory for all cells in this column. The cell factory is responsible for rendering the data contained within eachTableCell
for a single table column.By default,
TableColumn
uses thedefault 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 (seeCell
andTableView
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:
-
sortTypeProperty
Used to state whether this column, if it is part of a sort order (seeTableView.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 TableView, assuming of course that this column is in the sortOrder ObservableList to begin with.- Returns:
- the
sortType
property - See Also:
-
setSortType
Sets the value of thesortType
property.- Property description:
- Used to state whether this column, if it is part of a sort order (see
TableView.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 TableView, assuming of course that this column is in the sortOrder ObservableList to begin with. - Parameters:
value
- the value for thesortType
property- See Also:
-
getSortType
Gets the value of thesortType
property.- Property description:
- Used to state whether this column, if it is part of a sort order (see
TableView.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 TableView, assuming of course that this column is in the sortOrder ObservableList to begin with. - Returns:
- the value of the
sortType
property - See Also:
-
setOnEditStart
Sets the value of theonEditStart
property.- Property description:
- This event handler will be fired when the user successfully initiates editing.
- Parameters:
value
- the value for theonEditStart
property- See Also:
-
getOnEditStart
Gets the value of theonEditStart
property.- Property description:
- This event handler will be fired when the user successfully initiates editing.
- Returns:
- the value of the
onEditStart
property - See Also:
-
onEditStartProperty
This event handler will be fired when the user successfully initiates editing.- Returns:
- the on edit start property
- See Also:
-
setOnEditCommit
Sets the value of theonEditCommit
property.- Property description:
- This event handler will be fired when the user successfully commits their editing.
- Parameters:
value
- the value for theonEditCommit
property- See Also:
-
getOnEditCommit
Gets the value of theonEditCommit
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:
-
onEditCommitProperty
This event handler will be fired when the user successfully commits their editing.- Returns:
- the on edit commit property
- See Also:
-
setOnEditCancel
Sets the value of theonEditCancel
property.- Property description:
- This event handler will be fired when the user cancels editing a cell.
- Parameters:
value
- the value for theonEditCancel
property- See Also:
-
getOnEditCancel
Gets the value of theonEditCancel
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:
-
onEditCancelProperty
This event handler will be fired when the user cancels editing a cell.- Returns:
- the on edit cancel property
- See Also:
-
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 classTableColumnBase<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
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 aCellDataFeatures
(see, for example, the CellDataFeatures classes belonging toTableColumn
andTreeTableColumn
for more information).- Specified by:
getCellObservableValue
in classTableColumnBase<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
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 aCellDataFeatures
(see, for example, the CellDataFeatures classes belonging toTableColumn
andTreeTableColumn
for more information).- Specified by:
getCellObservableValue
in classTableColumnBase<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
The type of thisStyleable
that is to be used in selector matching. This is analogous to an "element" in HTML. (CSS Type Selector).- Specified by:
getTypeSelector
in interfaceStyleable
- Returns:
- "TableColumn"
- Since:
- JavaFX 8.0
-
getStyleableParent
Return the parent of this Styleable, or null if there is no parent.- Specified by:
getStyleableParent
in interfaceStyleable
- Returns:
getTableView()
- Since:
- JavaFX 8.0
-
getCssMetaData
The CssMetaData of this Styleable. This may be returned as an unmodifiable list.- Specified by:
getCssMetaData
in interfaceStyleable
- Returns:
- the CssMetaData
- Since:
- JavaFX 8.0
-
getClassCssMetaData
Gets theCssMetaData
associated with this class, which may include theCssMetaData
of its superclasses.- Returns:
- the
CssMetaData
- Since:
- JavaFX 8.0
-