Class FilteredComboBoxModel<T>

java.lang.Object
is.codion.swing.common.model.component.combobox.FilteredComboBoxModel<T>
Type Parameters:
T - the type of values in this combo box model
All Implemented Interfaces:
FilteredModel<T>, ComboBoxModel<T>, ListModel<T>
Direct Known Subclasses:
EntityComboBoxModel, ItemComboBoxModel

public class FilteredComboBoxModel<T> extends Object implements FilteredModel<T>, ComboBoxModel<T>
A default combo box model implementation based on FilteredModel.
See Also:
  • Field Details

    • COMBO_BOX_NULL_CAPTION

      public static final PropertyValue<String> COMBO_BOX_NULL_CAPTION
      Specifies the caption used by default to represent null in combo box models. Value type: String
      Default value: -
  • Constructor Details

    • FilteredComboBoxModel

      public FilteredComboBoxModel()
      Instantiates a new FilteredComboBoxModel. The model items are sorted automatically with a default collation based comparator. To prevent sorting set the comparator to null via comparator() before adding items.
  • Method Details

    • refresher

      public final FilteredModel.Refresher<T> refresher()
      Specified by:
      refresher in interface FilteredModel<T>
      Returns:
      this models Refresher instance
    • refresh

      public final void refresh()
      Description copied from interface: FilteredModel
      Refreshes the items in this filtered model using its FilteredModel.Refresher.
      Specified by:
      refresh in interface FilteredModel<T>
      See Also:
    • refreshThen

      public final void refreshThen(Consumer<Collection<T>> afterRefresh)
      Description copied from interface: FilteredModel
      Refreshes the data in this filtered model using its FilteredModel.Refresher. Note that this method only throws exceptions when run synchronously off the user interface thread. Use FilteredModel.Refresher.refreshFailedEvent() to listen for exceptions that happen during asynchronous refresh.
      Specified by:
      refreshThen in interface FilteredModel<T>
      Parameters:
      afterRefresh - called after a successful refresh, may be null
      See Also:
    • clear

      public final void clear()
      Clears all items from this combo box model, including the null item and sets the selected item to null
    • cleared

      public final boolean cleared()
      Returns:
      true if the model data has been cleared and needs to be refreshed
    • setItems

      public final void setItems(Collection<T> items)
      Resets the items of this model using the values found in items.
      Parameters:
      items - the items to display in this combo box model
      Throws:
      IllegalArgumentException - in case an item fails validation
      See Also:
    • filterItems

      public final void filterItems()
      Description copied from interface: FilteredModel
      Filters this model according to the condition specified by FilteredModel.includeCondition(). If no include condition is specified this method does nothing. This method does not interfere with the internal ordering of the visible items.
      Specified by:
      filterItems in interface FilteredModel<T>
      See Also:
    • visibleItems

      public final List<T> visibleItems()
      Specified by:
      visibleItems in interface FilteredModel<T>
      Returns:
      an unmodifiable view of the visible items, in the order they appear in the model
    • filteredItems

      public final Collection<T> filteredItems()
      Specified by:
      filteredItems in interface FilteredModel<T>
      Returns:
      an unmodifiable view of the filtered items
    • items

      public final Collection<T> items()
      Specified by:
      items in interface FilteredModel<T>
      Returns:
      an unmodifiable view of all visible and filtered items in this model
      See Also:
    • includeCondition

      public final Value<Predicate<T>> includeCondition()
      Specified by:
      includeCondition in interface FilteredModel<T>
      Returns:
      the include condition value
    • filteredCount

      public final int filteredCount()
      Specified by:
      filteredCount in interface FilteredModel<T>
      Returns:
      the number of currently filtered items
    • visibleCount

      public final int visibleCount()
      Specified by:
      visibleCount in interface FilteredModel<T>
      Returns:
      the number of currently visible items
    • visible

      public final boolean visible(T item)
      Description copied from interface: FilteredModel
      Returns true if this model contains the given item, and it is visible, that is, not filtered
      Specified by:
      visible in interface FilteredModel<T>
      Parameters:
      item - the item
      Returns:
      true if the given item is visible
    • filtered

      public final boolean filtered(T item)
      Description copied from interface: FilteredModel
      Returns true if this model contains the given item, and it is filtered, that is, is not visible
      Specified by:
      filtered in interface FilteredModel<T>
      Parameters:
      item - the item
      Returns:
      true if the given item is filtered
    • add

      public final void add(T item)
      Adds the given item to this model, respecting the sorting order if specified. If this model already contains the item, calling this method has no effect. Note that if the item does not satisfy the include condition, it will be filtered right away.
      Parameters:
      item - the item to add
      Throws:
      IllegalArgumentException - in case the item fails validation
      See Also:
    • remove

      public final void remove(T item)
      Removes the given item from this model
      Parameters:
      item - the item to remove
    • replace

      public final void replace(T item, T replacement)
      Replaces the given item in this combo box model
      Parameters:
      item - the item to replace
      replacement - the replacement item
      Throws:
      IllegalArgumentException - in case the replacement item fails validation
    • containsItem

      public final boolean containsItem(T item)
      Description copied from interface: FilteredModel
      Returns true if this model contains the given item, visible or filtered.
      Specified by:
      containsItem in interface FilteredModel<T>
      Parameters:
      item - the item
      Returns:
      true if this model contains the item
    • comparator

      public final Value<Comparator<T>> comparator()
      Controls the Comparator used when sorting the visible items in this model and sorts the model accordingly. This Comparator must take into account the null value if a null item has been set via nullItem(). If a null comparator is provided no sorting will be performed.
      Returns:
      the Value controlling the comparator used when sorting, value may be null if the items of this model should not be sorted
    • itemValidator

      public final Value<Predicate<T>> itemValidator()
      Provides a way for the model to prevent the addition of certain items. Trying to add items that fail validation will result in an exception. Note that any translation of the selected item is done before validation.
      Returns:
      the Value controlling the item validator
    • selectedItemTranslator

      public final Value<Function<Object,T>> selectedItemTranslator()
      Provides a way for the combo box model to translate an item when it is selected, such as selecting the String "1" in a String based model when selected item is set to the number 1.
      Returns:
      the Value controlling the selected item translator
    • validSelectionPredicate

      public final Value<Predicate<T>> validSelectionPredicate()
      Provides a way for the combo box model to prevent the selection of certain items.
      Returns:
      the Value controlling the valid selection predicate
    • includeNull

      public final State includeNull()
      Returns:
      the State controlling whether a null value is included as the first item
      See Also:
    • nullItem

      public final Value<T> nullItem()
      Controls the item that should represent the null value in this model. Note that includeNull() must be used as well to enable the null value.
      Returns:
      the Value controlling the item representing null
      See Also:
    • nullSelected

      public final boolean nullSelected()
      Returns true if this model contains null and it is selected.
      Returns:
      true if this model contains null and it is selected, false otherwise
      See Also:
    • selectionEmpty

      public final StateObserver selectionEmpty()
      Returns:
      a StateObserver indicating whether the selection is empty or the value representing null is selected
    • selectedValue

      public final T selectedValue()
      Returns:
      the selected value, null in case the value representing null is selected
      See Also:
    • getSelectedItem

      public final T getSelectedItem()
      Specified by:
      getSelectedItem in interface ComboBoxModel<T>
      Returns:
      the selected item, N.B. this can include the nullItem in case it has been set via nullItem(), selectedValue() is usually what you want
    • setSelectedItem

      public final void setSelectedItem(Object item)
      Specified by:
      setSelectedItem in interface ComboBoxModel<T>
      Parameters:
      item - the item to select
    • filterSelectedItem

      public final State filterSelectedItem()
      Specifies whether filtering can change the selected item, if true then the selected item is set to null when the currently selected item is filtered from the model, otherwise the selected item can potentially represent a value which is not currently visible in the model. This is true by default.
      Returns:
      the State controlling whether the selected item is changed when it is filtered
    • addListDataListener

      public final void addListDataListener(ListDataListener listener)
      Specified by:
      addListDataListener in interface ListModel<T>
    • removeListDataListener

      public final void removeListDataListener(ListDataListener listener)
      Specified by:
      removeListDataListener in interface ListModel<T>
    • getElementAt

      public final T getElementAt(int index)
      Specified by:
      getElementAt in interface ListModel<T>
      Parameters:
      index - the index
      Returns:
      the item at the given index
    • getSize

      public final int getSize()
      Specified by:
      getSize in interface ListModel<T>
      Returns:
      the number of visible items in this model
    • createSelectorValue

      public final <V> Value<V> createSelectorValue(FilteredComboBoxModel.ItemFinder<T,V> itemFinder)
      Type Parameters:
      V - the value type
      Parameters:
      itemFinder - responsible for finding the item to select
      Returns:
      a value linked to the selected item via the given finder instance
    • selectionEvent

      public final EventObserver<T> selectionEvent()
      Returns:
      an observer notified each time the selection changes