- Type Parameters:
S- The type of the objects contained within the FilteredTableView items list.
- All Implemented Interfaces:
Styleable,EventTarget,Skinnable
TableView2 that provides extended filtering options.
The table items have to be wrapped with a FilteredList.
configureForFiltering
is a convenient method that can be used for that purpose.
Features
A filter icon is displayed in the column's header, and its color will show if the column has a predicate applied or not.
A
PopupFilter control can be used to display filtering options. This
control can be displayed via FilteredTableColumn.onFilterAction.
Alternatively, a
SouthFilter control can be placed in the south
header node.
Sample
Let's provide the underlying data model, based on a Person class.
public class Person {
private StringProperty firstName;
public void setFirstName(String value) { firstNameProperty().set(value); }
public String getFirstName() { return firstNameProperty().get(); }
public StringProperty firstNameProperty() {
if (firstName == null) firstName = new SimpleStringProperty(this, "firstName");
return firstName;
}
private StringProperty lastName;
public void setLastName(String value) { lastNameProperty().set(value); }
public String getLastName() { return lastNameProperty().get(); }
public StringProperty lastNameProperty() {
if (lastName == null) lastName = new SimpleStringProperty(this, "lastName");
return lastName;
}
}
A FilteredTableView can be created, and filled with an observable list of people, that has to be wrapped with a SortedList and a FilteredList, in order to apply sorting and filtering:
FilteredTableView<Person> table = new FilteredTableView<Person>();
ObservableList<Person> people = getPeople();
FilteredList<Person> filteredPeople = new FilteredList<>(people);
filteredPeople.predicateProperty().bind(table.predicateProperty());
SortedList<Person> sortedPeople = new SortedList<>(filteredPeople);
sortedPeople.comparatorProperty().bind(table.comparatorProperty());
table.setItems(sortedPeople);
Alternatively, configureForFiltering
can be used:
FilteredTableView<Person> table = new FilteredTableView<Person>();
ObservableList<Person> people = getPeople();
FilteredTableView.configureForFiltering(table, people);
Now we add two columns to the table:
FilteredTableColumn<Person,String> firstNameCol = new FilteredTableColumn<>("First Name");
firstNameCol.setCellValueFactory(p -> p.getValue().firstNameProperty());
FilteredTableColumn<Person,String> lastNameCol = new FilteredTableColumn<>("Last Name");
lastNameCol.setCellValueFactory(p -> p.getValue().lastNameProperty());
table.getColumns().setAll(firstNameCol, lastNameCol);
A cell factory that allows commit on focus lost can be set:
firstName.setCellFactory(TextField2TableCell.forTableColumn());
We can fix some row and columns, and also show the row header:
table.getFixedColumns().setAll(firstNameColumn);
table.getFixedRows().setAll(0, 1, 2);
table.setRowHeaderVisible(true);
A popup filter editor can be easily added to a column header:
PopupFilter<Person, String> popupFirstNameFilter = new PopupStringFilter<>(firstName);
firstName.setOnFilterAction(e -> popupFirstNameFilter.showPopup());
Alternatively, a south filter editor can be added to the south node:
SouthFilter<Person, String> editorFirstNameFilter = new SouthFilter<>(firstName, String.class);
firstName.setSouthNode(editorFirstNameFilter);
-
Property Summary
PropertiesTypePropertyDescriptionfinal ObjectProperty<Callback<TableView<S>,Boolean>> The filter policy specifies how filtering in this FilteredTableView should be performed.final ObjectProperty<EventHandler<FilterEvent<TableView<S>>>>Called when there's a request to filter the control.final ReadOnlyObjectProperty<Predicate<S>>The predicate property is a read-only property that is representative of the current state of the filter list.Properties inherited from class org.controlsfx.control.tableview2.TableView2
columnFixingEnabled, rowFixingEnabled, rowHeaderContextMenuFactory, rowHeader, rowHeaderVisible, rowHeaderWidth, southHeaderBlendedProperties inherited from class javafx.scene.control.TableView
columnResizePolicy, comparator, editable, editingCell, fixedCellSize, focusModel, items, onScrollToColumn, onScrollTo, onSort, placeholder, rowFactory, selectionModel, sortPolicy, tableMenuButtonVisibleProperties inherited from class javafx.scene.control.Control
contextMenu, skin, tooltipProperties inherited from class javafx.scene.layout.Region
background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, widthProperties inherited from class javafx.scene.Parent
needsLayoutProperties inherited from class javafx.scene.Node
accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible -
Nested Class Summary
Nested classes/interfaces inherited from class org.controlsfx.control.tableview2.TableView2
TableView2.SpanTypeNested classes/interfaces inherited from class javafx.scene.control.TableView
TableView.ResizeFeatures<S extends Object>, TableView.TableViewFocusModel<S extends Object>, TableView.TableViewSelectionModel<S extends Object> -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Callback<FilteredTableView,Boolean> The defaultfilter policythat this FilteredTableView will use if no other policy is specified.Fields inherited from class javafx.scene.control.TableView
CONSTRAINED_RESIZE_POLICY, DEFAULT_SORT_POLICY, UNCONSTRAINED_RESIZE_POLICYFields inherited from class javafx.scene.layout.Region
USE_COMPUTED_SIZE, USE_PREF_SIZEFields inherited from class javafx.scene.Node
BASELINE_OFFSET_SAME_AS_HEIGHT -
Constructor Summary
ConstructorsConstructorDescriptionCreates a FilteredTableView control.FilteredTableView(ObservableList<S> items) -
Method Summary
Modifier and TypeMethodDescriptionstatic <S> voidconfigureForFiltering(FilteredTableView<S> tableView, ObservableList<S> items) Convenient method to set the items for theFilteredTableViewby wrapping them with aFilteredListand aSortedList, that are also bound properly to the table'spredicateProperty()andTableView.comparatorProperty().voidfilter()The filter method forces the TableView to re-run its filtering algorithm.final ObjectProperty<Callback<TableView<S>,Boolean>> The filter policy specifies how filtering in this FilteredTableView should be performed.Gets the value of the property filterPolicy.final EventHandler<FilterEvent<TableView<S>>>Gets the value of the property onFilter.Gets the value of the property predicate.final ObjectProperty<EventHandler<FilterEvent<TableView<S>>>>Called when there's a request to filter the control.final ReadOnlyObjectProperty<Predicate<S>>The predicate property is a read-only property that is representative of the current state of the filter list.voidResets all the filters applied, to both tableView and filtered columnsvoidsetBackingList(ObservableList<S> backingList) Sets the original observable list, before it is wrapped into aFilteredListand aSortedList.final voidsetFilterPolicy(Callback<TableView<S>, Boolean> callback) Sets the value of the property filterPolicy.final voidsetOnFilter(EventHandler<FilterEvent<TableView<S>>> value) Sets the value of the property onFilter.Methods inherited from class org.controlsfx.control.tableview2.TableView2
areRowsFixable, columnFixingEnabledProperty, createDefaultSkin, getColumnSpan, getFixedColumns, getFixedRows, getRowHeader, getRowHeaderContextMenuFactory, getRowHeaderWidth, getRowSpan, getSpanType, getUserAgentStylesheet, isColumnFixable, isColumnFixingEnabled, isRowFixable, isRowFixingEnabled, isRowHeaderVisible, isSouthHeaderBlended, rowFixingEnabledProperty, rowHeaderContextMenuFactoryProperty, rowHeaderProperty, rowHeaderVisibleProperty, rowHeaderWidthProperty, setColumnFixingEnabled, setRowFixingEnabled, setRowHeader, setRowHeaderContextMenuFactory, setRowHeaderVisible, setRowHeaderWidth, setSouthHeaderBlended, sort, southHeaderBlendedPropertyMethods inherited from class javafx.scene.control.TableView
columnResizePolicyProperty, comparatorProperty, edit, editableProperty, editingCellProperty, fixedCellSizeProperty, focusModelProperty, getClassCssMetaData, getColumnResizePolicy, getColumns, getComparator, getControlCssMetaData, getEditingCell, getFixedCellSize, getFocusModel, getItems, getOnScrollTo, getOnScrollToColumn, getOnSort, getPlaceholder, getRowFactory, getSelectionModel, getSortOrder, getSortPolicy, getVisibleLeafColumn, getVisibleLeafColumns, getVisibleLeafIndex, isEditable, isTableMenuButtonVisible, itemsProperty, onScrollToColumnProperty, onScrollToProperty, onSortProperty, placeholderProperty, queryAccessibleAttribute, refresh, resizeColumn, rowFactoryProperty, scrollTo, scrollTo, scrollToColumn, scrollToColumnIndex, selectionModelProperty, setColumnResizePolicy, setEditable, setFixedCellSize, setFocusModel, setItems, setOnScrollTo, setOnScrollToColumn, setOnSort, setPlaceholder, setRowFactory, setSelectionModel, setSortPolicy, setTableMenuButtonVisible, sortPolicyProperty, tableMenuButtonVisiblePropertyMethods inherited from class javafx.scene.control.Control
computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipPropertyMethods inherited from class javafx.scene.layout.Region
backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthPropertyMethods inherited from class javafx.scene.Parent
getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBoundsMethods inherited from class javafx.scene.Node
accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visiblePropertyMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface javafx.css.Styleable
getStyleableNode
-
Property Details
-
predicate
The predicate property is a read-only property that is representative of the current state of the filter list. The filter list contains the columns that have been added to it either programmatically or via a user clicking on the headers themselves.- See Also:
-
filterPolicy
The filter policy specifies how filtering in this FilteredTableView should be performed. For example, a basic filter policy may just callFXCollections.filter(tableView.getItems()), whereas a more advanced filter policy may call to a database to perform the necessary filtering on the server-side.FilteredTableView ships with a
default filter policythat does precisely as mentioned above: it simply attempts to filter the items list in-place.It is recommended that rather than override the
filtermethod that a different filter policy be provided instead.- See Also:
-
onFilter
Called when there's a request to filter the control.- See Also:
-
-
Field Details
-
DEFAULT_FILTER_POLICY
The defaultfilter policythat this FilteredTableView will use if no other policy is specified. The filter policy is a simpleCallbackthat accepts a FilteredTableView as the sole argument and expects a Boolean response representing whether the filter succeeded (true) or not (false).
-
-
Constructor Details
-
FilteredTableView
public FilteredTableView()Creates a FilteredTableView control. -
FilteredTableView
-
-
Method Details
-
configureForFiltering
public static <S> void configureForFiltering(FilteredTableView<S> tableView, ObservableList<S> items) Convenient method to set the items for theFilteredTableViewby wrapping them with aFilteredListand aSortedList, that are also bound properly to the table'spredicateProperty()andTableView.comparatorProperty().- Type Parameters:
S- The type of the objects contained within the FilteredTableView items list- Parameters:
tableView- The FilteredTableViewitems- Theitems list
-
setBackingList
Sets the original observable list, before it is wrapped into aFilteredListand aSortedList. It is required to track the changes in the underlying data model (back-end, or cell editing)- Parameters:
backingList- The originalObservableList- See Also:
-
getPredicate
Gets the value of the property predicate.- Property description:
- The predicate property is a read-only property that is representative of the current state of the filter list. The filter list contains the columns that have been added to it either programmatically or via a user clicking on the headers themselves.
-
predicateProperty
The predicate property is a read-only property that is representative of the current state of the filter list. The filter list contains the columns that have been added to it either programmatically or via a user clicking on the headers themselves.- See Also:
-
setFilterPolicy
Sets the value of the property filterPolicy.- Property description:
- The filter policy specifies how filtering in this FilteredTableView should be performed.
For example, a basic filter policy may just call
FXCollections.filter(tableView.getItems()), whereas a more advanced filter policy may call to a database to perform the necessary filtering on the server-side.FilteredTableView ships with a
default filter policythat does precisely as mentioned above: it simply attempts to filter the items list in-place.It is recommended that rather than override the
filtermethod that a different filter policy be provided instead.
-
getFilterPolicy
Gets the value of the property filterPolicy.- Property description:
- The filter policy specifies how filtering in this FilteredTableView should be performed.
For example, a basic filter policy may just call
FXCollections.filter(tableView.getItems()), whereas a more advanced filter policy may call to a database to perform the necessary filtering on the server-side.FilteredTableView ships with a
default filter policythat does precisely as mentioned above: it simply attempts to filter the items list in-place.It is recommended that rather than override the
filtermethod that a different filter policy be provided instead.
-
filterPolicyProperty
The filter policy specifies how filtering in this FilteredTableView should be performed. For example, a basic filter policy may just callFXCollections.filter(tableView.getItems()), whereas a more advanced filter policy may call to a database to perform the necessary filtering on the server-side.FilteredTableView ships with a
default filter policythat does precisely as mentioned above: it simply attempts to filter the items list in-place.It is recommended that rather than override the
filtermethod that a different filter policy be provided instead.- See Also:
-
setOnFilter
Sets the value of the property onFilter.- Property description:
- Called when there's a request to filter the control.
-
getOnFilter
Gets the value of the property onFilter.- Property description:
- Called when there's a request to filter the control.
-
onFilterProperty
Called when there's a request to filter the control.- See Also:
-
resetFilter
public void resetFilter()Resets all the filters applied, to both tableView and filtered columns -
filter
public void filter()The filter method forces the TableView to re-run its filtering algorithm. More often than not it is not necessary to call this method directly, as it is automatically called when thefilter policy, or the state of the FilteredTableColumnfilter predicatechanges. In other words, this method should only be called directly when something external changes and a filter is required.
-