Class CheckboxGroup<T>

All Implemented Interfaces:
AttachNotifier, DetachNotifier, HasAriaLabel, HasComponents, HasElement, HasEnabled, HasHelper, HasLabel, HasSize, HasStyle, HasTheme, HasValidation, HasValue<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>, HasValueAndElement<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>, HasClientValidation, HasThemeVariant<CheckboxGroupVariant>, HasTooltip, HasValidationProperties, HasItemComponents<T>, HasValidator<Set<T>>, HasDataView<T,Void,CheckboxGroupDataView<T>>, HasListDataView<T,CheckboxGroupListDataView<T>>, MultiSelect<CheckboxGroup<T>,T>, Serializable

@Tag("vaadin-checkbox-group") @NpmPackage(value="@vaadin/polymer-legacy-adapter",version="24.1.11") @NpmPackage(value="@vaadin/checkbox-group",version="24.1.11") @JsModule("@vaadin/polymer-legacy-adapter/style-modules.js") @JsModule("@vaadin/checkbox-group/src/vaadin-checkbox-group.js") public class CheckboxGroup<T> extends AbstractSinglePropertyField<CheckboxGroup<T>,Set<T>> implements HasAriaLabel, HasClientValidation, HasDataView<T,Void,CheckboxGroupDataView<T>>, HasHelper, HasItemComponents<T>, HasLabel, HasSize, HasStyle, HasListDataView<T,CheckboxGroupListDataView<T>>, HasTooltip, HasThemeVariant<CheckboxGroupVariant>, HasValidationProperties, HasValidator<Set<T>>, MultiSelect<CheckboxGroup<T>,T>
CheckBoxGroup is a multi-selection component where items are displayed as check boxes.

Use CheckBoxGroup to group related items. Individual checkboxes should be used for options that are not related to each other in any way.

Author:
Vaadin Ltd
See Also:
  • Constructor Details

  • Method Details

    • onAttach

      protected void onAttach(AttachEvent attachEvent)
      Description copied from class: Component
      Called when the component is attached to a UI.

      The default implementation does nothing.

      This method is invoked before the AttachEvent is fired for the component.

      Overrides:
      onAttach in class Component
      Parameters:
      attachEvent - the attach event
    • setItems

      public CheckboxGroupDataView<T> setItems(DataProvider<T,Void> dataProvider)
      Description copied from interface: HasDataView
      Set a generic data provider for the component to use and returns the base DataView that provides API to get information on the items.

      This method should be used only when the data provider type is not either ListDataProvider or BackEndDataProvider.

      Specified by:
      setItems in interface HasDataView<T,Void,CheckboxGroupDataView<T>>
      Parameters:
      dataProvider - DataProvider instance to use, not null
      Returns:
      DataView providing information on the data
    • setItems

      public CheckboxGroupDataView<T> setItems(InMemoryDataProvider<T> inMemoryDataProvider)
      Description copied from interface: HasDataView
      Sets an in-memory data provider for the component to use

      Note! Using a ListDataProvider instead of a InMemoryDataProvider is recommended to get access to ListDataView API by using HasListDataView.setItems(ListDataProvider).

      Specified by:
      setItems in interface HasDataView<T,Void,CheckboxGroupDataView<T>>
      Parameters:
      inMemoryDataProvider - InMemoryDataProvider to use, not null
      Returns:
      DataView providing information on the data
    • setItems

      public CheckboxGroupListDataView<T> setItems(ListDataProvider<T> dataProvider)
      Description copied from interface: HasListDataView
      Sets a ListDataProvider for the component to use and returns a ListDataView that provides information and allows operations on the items.
      Specified by:
      setItems in interface HasListDataView<T,CheckboxGroupListDataView<T>>
      Parameters:
      dataProvider - ListDataProvider providing items to the component.
      Returns:
      ListDataView providing access to the items
    • getListDataView

      public CheckboxGroupListDataView<T> getListDataView()
      Gets the list data view for the checkbox group. This data view should only be used when the items are in-memory and set with: If the items are not in-memory an exception is thrown.
      Specified by:
      getListDataView in interface HasListDataView<T,CheckboxGroupListDataView<T>>
      Returns:
      the list data view that provides access to the data bound to the checkbox group
    • getGenericDataView

      public CheckboxGroupDataView<T> getGenericDataView()
      Gets the generic data view for the checkbox group. This data view should only be used when getListDataView() is not applicable for the underlying data provider.
      Specified by:
      getGenericDataView in interface HasDataView<T,Void,CheckboxGroupDataView<T>>
      Returns:
      the generic DataView instance implementing CheckboxGroupDataView
    • updateSelection

      public void updateSelection(Set<T> addedItems, Set<T> removedItems)
      Description copied from interface: MultiSelect
      Updates the selection by adding and removing the given items from it.

      If all the added items were already selected and the removed items were not selected, this is a NO-OP.

      Duplicate items (in both add and remove sets) are ignored.

      Specified by:
      updateSelection in interface MultiSelect<CheckboxGroup<T>,T>
      Parameters:
      addedItems - the items to add, not null
      removedItems - the items to remove, not null
    • setValue

      public void setValue(Set<T> value)
      Sets the value of this component. If the new value is not equal to the previous value, fires a value change event.

      The component doesn't accept null values. The value of a checkbox group without any selected items is an empty set. You can use the HasValue.clear() method to set the empty value.

      Specified by:
      setValue in interface HasValue<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>
      Specified by:
      setValue in interface MultiSelect<CheckboxGroup<T>,T>
      Overrides:
      setValue in class AbstractField<CheckboxGroup<T>,Set<T>>
      Parameters:
      value - the new value to set, not null
      Throws:
      NullPointerException - if value is null
    • getSelectedItems

      public Set<T> getSelectedItems()
      Description copied from interface: MultiSelect
      Returns an immutable set of the currently selected items. It is safe to invoke other SelectionModel methods while iterating over the set.

      Implementation note: the iteration order of the items in the returned set should be well-defined and documented by the implementing class.

      Specified by:
      getSelectedItems in interface MultiSelect<CheckboxGroup<T>,T>
      Returns:
      the items in the current selection, not null
    • addSelectionListener

      public Registration addSelectionListener(MultiSelectionListener<CheckboxGroup<T>,T> listener)
      Description copied from interface: MultiSelect
      Adds a selection listener that will be called when the selection is changed either by the user or programmatically.
      Specified by:
      addSelectionListener in interface MultiSelect<CheckboxGroup<T>,T>
      Parameters:
      listener - the value change listener, not null
      Returns:
      a registration for the listener
    • onEnabledStateChanged

      public void onEnabledStateChanged(boolean enabled)
      Description copied from class: Component
      Handle component enable state when the enabled state changes.

      By default this sets or removes the 'disabled' attribute from the element. This can be overridden to have custom handling.

      Overrides:
      onEnabledStateChanged in class Component
      Parameters:
      enabled - the new enabled state of the component
    • setReadOnly

      public void setReadOnly(boolean readOnly)
      Description copied from interface: HasValue
      Sets the read-only mode of this HasValue to given mode. The user can't change the value when in read-only mode.

      A HasValue with a visual component in read-only mode typically looks visually different to signal to the user that the value cannot be edited.

      Specified by:
      setReadOnly in interface HasValue<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>
      Specified by:
      setReadOnly in interface HasValueAndElement<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>
      Parameters:
      readOnly - a boolean value specifying whether the component is put read-only mode or not
    • isReadOnly

      public boolean isReadOnly()
      Description copied from interface: HasValue
      Returns whether this HasValue is in read-only mode or not.
      Specified by:
      isReadOnly in interface HasValue<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>
      Specified by:
      isReadOnly in interface HasValueAndElement<AbstractField.ComponentValueChangeEvent<CheckboxGroup<T>,Set<T>>,Set<T>>
      Returns:
      false if the user can modify the value, true if not.
    • getItemEnabledProvider

      public SerializablePredicate<T> getItemEnabledProvider()
      Returns the item enabled predicate.
      Returns:
      the item enabled predicate
      See Also:
    • setItemEnabledProvider

      public void setItemEnabledProvider(SerializablePredicate<T> itemEnabledProvider)
      Sets the item enabled predicate for this checkbox group. The predicate is applied to each item to determine whether the item should be enabled (true) or disabled (false). Disabled items are displayed as grayed out and the user cannot select them. The default predicate always returns true (all the items are enabled).
      Parameters:
      itemEnabledProvider - the item enable predicate, not null
    • setItemLabelGenerator

      public void setItemLabelGenerator(ItemLabelGenerator<T> itemLabelGenerator)
      Sets the item label generator that is used to produce the strings shown in the checkbox group for each item. By default, String.valueOf(Object) is used.

      Setting an item label generator removes any previously set item renderer.

      Parameters:
      itemLabelGenerator - the item label provider to use, not null
    • getItemLabelGenerator

      public ItemLabelGenerator<T> getItemLabelGenerator()
      Gets the item label generator that is used to produce the strings shown in the checkbox group for each item.
      Returns:
      the item label generator used, not null
    • setLabel

      public void setLabel(String label)
      Sets the label for the checkbox group.
      Specified by:
      setLabel in interface HasLabel
      Parameters:
      label - value for the label property in the checkbox group
    • getLabel

      public String getLabel()
      Gets the label of the checkbox group.
      Specified by:
      getLabel in interface HasLabel
      Returns:
      the label property of the checkbox group
    • setAriaLabel

      public void setAriaLabel(String ariaLabel)
      Description copied from interface: HasAriaLabel
      Set the aria-label of the component to the given text.

      This method should not be used if HasAriaLabel.setAriaLabelledBy(String) is also used. If both attributes are present, aria-labelledby will take precedence over aria-label.

      Specified by:
      setAriaLabel in interface HasAriaLabel
      Parameters:
      ariaLabel - the aria-label text to set or null to clear
    • getAriaLabel

      public Optional<String> getAriaLabel()
      Description copied from interface: HasAriaLabel
      Gets the aria-label of the component.
      Specified by:
      getAriaLabel in interface HasAriaLabel
      Returns:
      an optional aria-label of the component if no aria-label has been set
    • setAriaLabelledBy

      public void setAriaLabelledBy(String labelledBy)
      Description copied from interface: HasAriaLabel
      Set the aria-labelledby of the component. The value must be a valid id attribute of another element that labels the component. The label element must be in the same DOM scope of the component, otherwise screen readers may fail to announce the label content properly.

      This method should not be used if HasAriaLabel.setAriaLabel(String) is also used. If both attributes are present, aria-labelledby will take precedence over aria-label.

      Specified by:
      setAriaLabelledBy in interface HasAriaLabel
      Parameters:
      labelledBy - the string with the id of the element that will be used as label or null to clear
    • getAriaLabelledBy

      public Optional<String> getAriaLabelledBy()
      Description copied from interface: HasAriaLabel
      Gets the aria-labelledby of the component
      Specified by:
      getAriaLabelledBy in interface HasAriaLabel
      Returns:
      an optional aria-labelledby of the component if no aria-labelledby has been set
    • setRequired

      public void setRequired(boolean required)
      Specifies that the user must fill in a value.
      Parameters:
      required - the boolean value to set
    • isRequired

      public boolean isRequired()
      Determines whether the checkbox group is marked as input required.

      This property is not synchronized automatically from the client side, so the returned value may not be the same as in client side.

      Returns:
      true if the input is required, false otherwise
    • setDisabled

      protected void setDisabled(boolean disabled)
      If true, the user cannot interact with this element.
      Parameters:
      disabled - the boolean value to set
    • isDisabledBoolean

      protected boolean isDisabledBoolean()
      If true, the user cannot interact with this element.
      Returns:
      the disabled property from the webcomponent
    • valueEquals

      protected boolean valueEquals(Set<T> value1, Set<T> value2)
      Description copied from class: AbstractField
      Compares to value instances to each other to determine whether they are equal. Equality is used to determine whether to update internal state and fire an event when AbstractField.setValue(Object) or AbstractField.setModelValue(Object, boolean) is called. Subclasses can override this method to define an alternative comparison method instead of Object.equals(Object).
      Overrides:
      valueEquals in class AbstractField<CheckboxGroup<T>,Set<T>>
      Parameters:
      value1 - the first instance
      value2 - the second instance
      Returns:
      true if the instances are equal; otherwise false
    • hasValidValue

      protected boolean hasValidValue()
      Description copied from class: AbstractSinglePropertyField
      Checks whether the element property has a value that can be converted to the model type. Property changes from the element will be ignored if this method returns false. The default implementation always return true.
      Overrides:
      hasValidValue in class AbstractSinglePropertyField<CheckboxGroup<T>,Set<T>>
      Returns:
      true if the element property value can be converted to the model type; otherwise false
    • getItemRenderer

      public ComponentRenderer<? extends Component,T> getItemRenderer()
      Returns the item component renderer.
      Returns:
      the item renderer
      Since:
      23.1
      See Also:
    • setRenderer

      public void setRenderer(ComponentRenderer<? extends Component,T> renderer)
      Sets the item renderer for this checkbox group. The renderer is applied to each item to create a component which represents the item.

      Note: Component acts as a label to the checkbox and clicks on it trigger the checkbox. Hence interactive components like DatePicker or ComboBox cannot be used.

      Parameters:
      renderer - the item renderer, not null
      Since:
      23.1
    • validate

      protected void validate()
    • addValidationStatusChangeListener

      public Registration addValidationStatusChangeListener(ValidationStatusChangeListener<Set<T>> listener)
      Description copied from interface: HasValidator
      Enables the implementing components to notify changes in their validation status to the observers.

      Note: This method can be overridden by the implementing classes e.g. components, to enable the associated Binder.Binding instance subscribing for their validation change events and revalidate itself.

      This method primarily designed for notifying the Binding about the validation status changes of a bound component at the client-side. WebComponents such as <vaadin-date-picker> or any other component that accept a formatted text as input should be able to communicate their invalid status to their server-side instance, and a bound server-side component instance must notify its binding about this validation status change as well. When the binding instance revalidates, a chain of validators and convertors get executed one of which is the default validator provided by HasValidator.getDefaultValidator(). Thus, In order for the binding to be able to show/clear errors for its associated bound field, it is important that implementing components take that validation status into account while implementing any validator and converter including HasValidator.getDefaultValidator(). Here is an example:

       @Tag("date-picker-demo")
       public class DatePickerDemo implements HasValidator<LocalDate> {
      
           // Each web component has a way to communicate its validation status
           // to its server-side component instance. The following clientSideValid
           // state is introduced here just for the sake of simplicity of this code
           // snippet:
           boolean clientSideValid = true;
      
           /**
            * Note how clientSideValid engaged in the definition
            * of this method. It is important to reflect this status either
            * in the returning validation result of this method or any other
            * validation that is associated with this component.
            */
           @Override
           public Validator getDefaultValidator() {
                return (value, valueContext) -> clientSideValid ? ValidationResult.ok()
                       : ValidationResult.error("Invalid date format");
           }
      
           private final Collection<ValidationStatusChangeListener<LocalDate>>
               validationStatusListeners = new ArrayList<>();
      
           /**
            * This enables the binding to subscribe for the validation status
            * change events that are fired by this component and revalidate
            * itself respectively.
            */
           @Override
           public Registration addValidationStatusChangeListener(
                   ValidationStatusChangeListener<LocalDate> listener) {
               validationStatusListeners.add(listener);
               return () -> validationStatusListeners.remove(listener);
           }
      
           private void fireValidationStatusChangeEvent(
                   boolean newValidationStatus) {
               if (this.clientSideValid != newValidationStatus) {
                   this.clientSideValid = newValidationStatus;
                   var event = new ValidationStatusChangeEvent<>(this,
                           newValidationStatus);
                   validationStatusListeners.forEach(
                           listener -> listener.validationStatusChanged(event));
               }
           }
       }
       
      Specified by:
      addValidationStatusChangeListener in interface HasValidator<T>
      Returns:
      Registration of the added listener.
      See Also: