Class 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 of 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);
     
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javafx.scene.control.TableView

        javafx.scene.control.TableView.ResizeFeatures<S extends Object>, javafx.scene.control.TableView.TableViewFocusModel<S extends Object>, javafx.scene.control.TableView.TableViewSelectionModel<S extends Object>
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static javafx.util.Callback<FilteredTableView,​Boolean> DEFAULT_FILTER_POLICY
      The default filter policy that 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_POLICY
      • Fields inherited from class javafx.scene.layout.Region

        USE_COMPUTED_SIZE, USE_PREF_SIZE
      • Fields inherited from class javafx.scene.Node

        BASELINE_OFFSET_SAME_AS_HEIGHT
    • 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 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>,​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 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>,​Boolean> callback)  
      void setOnFilter​(javafx.event.EventHandler<FilterEvent<javafx.scene.control.TableView<S>>> value)  
      • 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
      • Methods inherited from interface javafx.css.Styleable

        getStyleableNode
    • Field Detail

      • DEFAULT_FILTER_POLICY

        public static final javafx.util.Callback<FilteredTableView,​Boolean> DEFAULT_FILTER_POLICY
        The default 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).
    • 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 the FilteredTableView by wrapping them with a FilteredList and a SortedList, that are also bound properly to the table's predicateProperty() and TableView.comparatorProperty().
        Type Parameters:
        S - The type of the objects contained within the FilteredTableView items list
        Parameters:
        tableView - The FilteredTableView
        items - The items list
      • setBackingList

        public void setBackingList​(javafx.collections.ObservableList<S> backingList)
        Sets the original observable list, before it is wrapped into a FilteredList and a SortedList. It is required to track the changes in the underlying data model (back-end, or cell editing)
        Parameters:
        backingList - The original ObservableList
        See Also:
        configureForFiltering(FilteredTableView, ObservableList)
      • getPredicate

        public final Predicate<S> getPredicate()
      • 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 the 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.