S - The type of the objects contained within the FilteredTableView items list.public class FilteredTableView<S> extends TableView2<S>
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.
PopupFilter control can be used to display filtering options. This
control can be displayed via FilteredTableColumn.onFilterAction.
SouthFilter control can be placed in the south
header node.
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);
| Type | Property and Description |
|---|---|
javafx.beans.property.ObjectProperty<javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean>> |
filterPolicy
The filter policy specifies how filtering in this FilteredTableView should be performed.
|
javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>> |
onFilter
Called when there's a request to filter the control.
|
javafx.beans.property.ReadOnlyObjectProperty<java.util.function.Predicate<S>> |
predicate
The predicate property is a read-only property that is representative of the
current state of the filter list.
|
columnFixingEnabled, rowFixingEnabled, rowHeaderContextMenuFactory, rowHeader, rowHeaderVisible, rowHeaderWidth, southHeaderBlendedcolumnResizePolicy, comparator, editable, editingCell, fixedCellSize, focusModel, items, onScrollToColumn, onScrollTo, onSort, placeholder, rowFactory, selectionModel, sortPolicy, tableMenuButtonVisiblecontextMenu, skinClassName, skin, tooltipbackground, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, widthaccessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, impl_showMnemonics, impl_treeVisible, 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, visibleTableView2.SpanType| Modifier and Type | Field and Description |
|---|---|
static javafx.util.Callback<FilteredTableView,java.lang.Boolean> |
DEFAULT_FILTER_POLICY
The default
filter policy that this FilteredTableView
will use if no other policy is specified. |
| Constructor and Description |
|---|
FilteredTableView()
Creates a FilteredTableView control.
|
FilteredTableView(javafx.collections.ObservableList<S> items) |
| Modifier and Type | Method and Description |
|---|---|
static <S> void |
configureForFiltering(FilteredTableView<S> tableView,
javafx.collections.ObservableList<S> items)
Convenient method to set the items for the
FilteredTableView
by wrapping them with a FilteredList and a SortedList, that
are also bound properly to the table's predicateProperty() and
TableView.comparatorProperty(). |
void |
filter()
The filter method forces the TableView to re-run its filtering algorithm.
|
javafx.beans.property.ObjectProperty<javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean>> |
filterPolicyProperty()
The filter policy specifies how filtering in this FilteredTableView should be performed.
|
javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean> |
getFilterPolicy()
Gets the value of the property filterPolicy.
|
javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> |
getOnFilter()
Gets the value of the property onFilter.
|
java.util.function.Predicate<S> |
getPredicate()
Gets the value of the property predicate.
|
javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>> |
onFilterProperty()
Called when there's a request to filter the control.
|
javafx.beans.property.ReadOnlyObjectProperty<java.util.function.Predicate<S>> |
predicateProperty()
The predicate property is a read-only property that is representative of the
current state of the filter list.
|
void |
resetFilter()
Resets all the filters applied, to both tableView and filtered columns
|
void |
setBackingList(javafx.collections.ObservableList<S> backingList)
Sets the original observable list, before it is wrapped into a
FilteredList and a SortedList. |
void |
setFilterPolicy(javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean> callback)
Sets the value of the property filterPolicy.
|
void |
setOnFilter(javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> value)
Sets the value of the property onFilter.
|
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, southHeaderBlendedPropertycolumnResizePolicyProperty, 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, tableMenuButtonVisiblePropertycomputeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, impl_cssGetFocusTraversableInitialValue, impl_processCSS, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinClassNameProperty, skinProperty, tooltipPropertybackgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getWidth, heightProperty, impl_computeContains, impl_computeGeomBounds, impl_computeLayoutBounds, impl_createPeer, impl_notifyLayoutBoundsChanged, impl_pickNodeLocal, impl_updatePeer, 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, snapSize, snapSpace, snapToPixelProperty, widthPropertygetChildren, getChildrenUnmodifiable, getImpl_traversalEngine, getManagedChildren, getStylesheets, impl_getAllParentStylesheets, impl_processMXNode, impl_traversalEngineProperty, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setImpl_traversalEngine, setNeedsLayout, updateBoundsaccessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, containsBounds, 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, 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, hasProperties, hoverProperty, idProperty, impl_clearDirty, impl_computeIntersects, impl_cssGetCursorInitialValue, impl_findStyles, impl_geomChanged, impl_getLeafTransform, impl_getMatchingStyles, impl_getPeer, impl_getPivotX, impl_getPivotY, impl_getPivotZ, impl_getStyleMap, impl_hasTransforms, impl_intersects, impl_intersectsBounds, impl_isDirty, impl_isDirtyEmpty, impl_isShowMnemonics, impl_isTreeVisible, impl_layoutBoundsChanged, impl_markDirty, impl_pickNode, impl_processCSS, impl_reapplyCSS, impl_setShowMnemonics, impl_setStyleMap, impl_showMnemonicsProperty, impl_syncPeer, impl_transformsChanged, impl_traverse, impl_treeVisibleProperty, 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, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, visiblePropertypublic final javafx.beans.property.ReadOnlyObjectProperty<java.util.function.Predicate<S>> predicateProperty
getPredicate()public final javafx.beans.property.ObjectProperty<javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean>> filterPolicyProperty
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 policy that does precisely as mentioned above: it simply attempts
to filter the items list in-place.
It is recommended that rather than override the filter
method that a different filter policy be provided instead.
getFilterPolicy(),
setFilterPolicy(Callback)public final javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>> onFilterProperty
getOnFilter(),
setOnFilter(EventHandler)public static final javafx.util.Callback<FilteredTableView,java.lang.Boolean> DEFAULT_FILTER_POLICY
filter policy that this FilteredTableView
will use if no other policy is specified. The filter policy is a simple
Callback that accepts a FilteredTableView as the sole argument and expects
a Boolean response representing whether the filter succeeded (true) or not
(false).public FilteredTableView()
public FilteredTableView(javafx.collections.ObservableList<S> items)
public static <S> void configureForFiltering(FilteredTableView<S> tableView, javafx.collections.ObservableList<S> items)
FilteredTableView
by wrapping them with a FilteredList and a SortedList, that
are also bound properly to the table's predicateProperty() and
TableView.comparatorProperty().S - The type of the objects contained within the FilteredTableView items listtableView - The FilteredTableViewitems - The items listpublic void setBackingList(javafx.collections.ObservableList<S> backingList)
FilteredList and a SortedList.
It is required to track the changes in the underlying data model (back-end,
or cell editing)backingList - The original ObservableListconfigureForFiltering(org.controlsfx.control.tableview2.FilteredTableView, javafx.collections.ObservableList)public final java.util.function.Predicate<S> getPredicate()
public final javafx.beans.property.ReadOnlyObjectProperty<java.util.function.Predicate<S>> predicateProperty()
getPredicate()public final void setFilterPolicy(javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean> callback)
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 policy that does precisely as mentioned above: it simply attempts
to filter the items list in-place.
It is recommended that rather than override the filter
method that a different filter policy be provided instead.
public final javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean> getFilterPolicy()
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 policy that does precisely as mentioned above: it simply attempts
to filter the items list in-place.
It is recommended that rather than override the filter
method that a different filter policy be provided instead.
public final javafx.beans.property.ObjectProperty<javafx.util.Callback<javafx.scene.control.TableView<S>,java.lang.Boolean>> filterPolicyProperty()
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 policy that does precisely as mentioned above: it simply attempts
to filter the items list in-place.
It is recommended that rather than override the filter
method that a different filter policy be provided instead.
getFilterPolicy(),
setFilterPolicy(Callback)public final void setOnFilter(javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> value)
public final javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> getOnFilter()
public final javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>> onFilterProperty()
getOnFilter(),
setOnFilter(EventHandler)public void resetFilter()
public void filter()
filter policy, or the state of the
FilteredTableColumn filter predicate
changes. In other words, this method should only be called directly when
something external changes and a filter is required.