- java.lang.Object
-
- javafx.scene.Node
-
- javafx.scene.Parent
-
- javafx.scene.layout.Region
-
- javafx.scene.control.Control
-
- javafx.scene.control.TableView<S>
-
- org.controlsfx.control.tableview2.TableView2<S>
-
- org.controlsfx.control.tableview2.FilteredTableView<S>
-
- Type Parameters:
S
- The type of the objects contained within the FilteredTableView items list.
- All Implemented Interfaces:
javafx.css.Styleable
,javafx.event.EventTarget
,javafx.scene.control.Skinnable
public class FilteredTableView<S> extends TableView2<S>
A subclass ofTableView2
that provides extended filtering options. The table items have to be wrapped with aFilteredList
.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.
APopupFilter
control can be used to display filtering options. This control can be displayed viaFilteredTableColumn.onFilterAction
.
Alternatively, aSouthFilter
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);
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.controlsfx.control.tableview2.TableView2
TableView2.SpanType
-
-
Field Summary
Fields Modifier and Type Field Description static javafx.util.Callback<FilteredTableView,Boolean>
DEFAULT_FILTER_POLICY
The defaultfilter policy
that this FilteredTableView will use if no other policy is specified.
-
Constructor Summary
Constructors Constructor Description FilteredTableView()
Creates a FilteredTableView control.FilteredTableView(javafx.collections.ObservableList<S> items)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <S> void
configureForFiltering(FilteredTableView<S> tableView, javafx.collections.ObservableList<S> items)
Convenient method to set the items for theFilteredTableView
by wrapping them with aFilteredList
and aSortedList
, that are also bound properly to the table'spredicateProperty()
andTableView.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>,Boolean>>
filterPolicyProperty()
javafx.util.Callback<javafx.scene.control.TableView<S>,Boolean>
getFilterPolicy()
javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>
getOnFilter()
Predicate<S>
getPredicate()
javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>>
onFilterProperty()
javafx.beans.property.ReadOnlyObjectProperty<Predicate<S>>
predicateProperty()
void
resetFilter()
Resets all the filters applied, to both tableView and filtered columnsvoid
setBackingList(javafx.collections.ObservableList<S> backingList)
Sets the original observable list, before it is wrapped into aFilteredList
and aSortedList
.void
setFilterPolicy(javafx.util.Callback<javafx.scene.control.TableView<S>,Boolean> callback)
void
setOnFilter(javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> value)
-
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, southHeaderBlendedProperty
-
Methods 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, tableMenuButtonVisibleProperty
-
Methods 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, tooltipProperty
-
Methods 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, widthProperty
-
Methods inherited from class javafx.scene.Parent
getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
-
Methods 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, visibleProperty
-
-
-
-
Field Detail
-
DEFAULT_FILTER_POLICY
public static final javafx.util.Callback<FilteredTableView,Boolean> DEFAULT_FILTER_POLICY
The defaultfilter policy
that this FilteredTableView will use if no other policy is specified. The filter policy is a simpleCallback
that accepts a FilteredTableView as the sole argument and expects a Boolean response representing whether the filter succeeded (true) or not (false).
-
-
Constructor Detail
-
FilteredTableView
public FilteredTableView()
Creates a FilteredTableView control.
-
FilteredTableView
public FilteredTableView(javafx.collections.ObservableList<S> items)
-
-
Method Detail
-
configureForFiltering
public static <S> void configureForFiltering(FilteredTableView<S> tableView, javafx.collections.ObservableList<S> items)
Convenient method to set the items for theFilteredTableView
by wrapping them with aFilteredList
and 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
public void setBackingList(javafx.collections.ObservableList<S> backingList)
Sets the original observable list, before it is wrapped into aFilteredList
and aSortedList
. It is required to track the changes in the underlying data model (back-end, or cell editing)- Parameters:
backingList
- The originalObservableList
- See Also:
configureForFiltering(FilteredTableView, ObservableList)
-
predicateProperty
public final javafx.beans.property.ReadOnlyObjectProperty<Predicate<S>> predicateProperty()
-
setFilterPolicy
public final void setFilterPolicy(javafx.util.Callback<javafx.scene.control.TableView<S>,Boolean> callback)
-
getFilterPolicy
public final javafx.util.Callback<javafx.scene.control.TableView<S>,Boolean> getFilterPolicy()
-
filterPolicyProperty
public final javafx.beans.property.ObjectProperty<javafx.util.Callback<javafx.scene.control.TableView<S>,Boolean>> filterPolicyProperty()
-
setOnFilter
public final void setOnFilter(javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> value)
-
getOnFilter
public final javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> getOnFilter()
-
onFilterProperty
public final javafx.beans.property.ObjectProperty<javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>>> onFilterProperty()
-
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 predicate
changes. In other words, this method should only be called directly when something external changes and a filter is required.
-
-