Class ComboBox<T>

All Implemented Interfaces:
Animation, Editable, ActionSource, StyleListener

public class ComboBox<T> extends List<T> implements ActionSource

A ComboBox is a list that allows only one selection at a time, when a user clicks the ComboBox a popup button with the full list of elements allows the selection of a single element. The ComboBox is driven by the list model and allows all the renderer features of the List as well.

The ComboBox is notoriously hard to style properly as it relies on a complex dynamic of popup renderer and instantly visible renderer. The UIID for the ComboBox is "ComboBox" however if you set it to something else all the other UIID's will also change their prefix. E.g. the "ComboBoxPopup" UIID will become "MyNewUIIDPopup".

The combo box defines the following UIID's by default:

  • ComboBox

  • ComboBoxItem

  • ComboBoxFocus

  • PopupContentPane

  • PopupItem

  • PopupFocus

This class also defines theme constants that allow some native themes to manipulate its behavior e.g.:

  • popupTitleBool - shows the "label for" value as the title of the popup dialog

  • popupCancelBodyBool - Adds a cancel button into the popup dialog

  • centeredPopupBool - shows the popup dialog in the center of the screen instead of under the popup

  • otherPopupRendererBool - Uses a different list cell render for the popup than the one used for the ComboBox itself. When this is false PopupItem & PopupFocus become irrelevant. Notice that the Android native theme defines this to true.

iOS doesn't use combo boxes as part of its UI paradigm. Its available there mostly in web applications and feels unnatural in iOS which is why we recommend using the com.codename1.ui.spinner.Picker class.

The sample code below uses the com.codename1.ui.list.GenericListCellRenderer to create a richer ComboBox UI.

public void showForm() {
  Form hi = new Form("ComboBox", new BoxLayout(BoxLayout.Y_AXIS));
  ComboBox> combo = new ComboBox<> (
          createListEntry("A Game of Thrones", "1996"),
          createListEntry("A Clash Of Kings", "1998"),
          createListEntry("A Storm Of Swords", "2000"),
          createListEntry("A Feast For Crows", "2005"),
          createListEntry("A Dance With Dragons", "2011"),
          createListEntry("The Winds of Winter", "2016 (please, please, please)"),
          createListEntry("A Dream of Spring", "Ugh"));

  combo.setRenderer(new GenericListCellRenderer<>(new MultiButton(), new MultiButton()));
  hi.show();
}

private Map createListEntry(String name, String date) {
    Map entry = new HashMap<>();
    entry.put("Line1", name);
    entry.put("Line2", date);
    return entry;
}
  • Constructor Details

    • ComboBox

      public ComboBox(Vector<T> items)

      Creates a new instance of ComboBox

      Parameters
      • items: set of items placed into the combo box model
    • ComboBox

      public ComboBox(Object... items)

      Creates a new instance of ComboBox

      Parameters
      • items: set of items placed into the combo box model
    • ComboBox

      public ComboBox()
      Constructs an empty combo box
    • ComboBox

      public ComboBox(ListModel<T> model)

      Creates a new instance of ComboBox

      Parameters
      • model: the model for the combo box elements and selection
  • Method Details

    • isDefaultActAsSpinnerDialog

      public static boolean isDefaultActAsSpinnerDialog()

      When this flag is active the combo box acts as a button that opens a dialog that looks like a spinner this allows creating user interfaces for touch devices where a spinner UI approach is more common than a combo box paradigm.

      Returns

      the defaultActAsSpinnerDialog

    • setDefaultActAsSpinnerDialog

      public static void setDefaultActAsSpinnerDialog(boolean aDefaultActAsSpinnerDialog)

      When this flag is active the combo box acts as a button that opens a dialog that looks like a spinner this allows creating user interfaces for touch devices where a spinner UI approach is more common than a combo box paradigm.

      Parameters
      • aDefaultActAsSpinnerDialog: the defaultActAsSpinnerDialog to set
    • isDefaultIncludeSelectCancel

      public static boolean isDefaultIncludeSelectCancel()

      Indicates whethe the soft buttons for select/cancel should appear for the combo box by default

      Returns

      true if the soft buttons for select/cancel should appear for the combo box

    • setDefaultIncludeSelectCancel

      public static void setDefaultIncludeSelectCancel(boolean aDefaultIncludeSelectCancel)

      Indicates whethe the soft buttons for select/cancel should appear for the combo box by default

      Parameters
      • aDefaultIncludeSelectCancel: the new value
    • getComboBoxImage

      public Image getComboBoxImage()

      Gets the ComboBox drop down icon

      Returns

      the drop down icon

    • setComboBoxImage

      public void setComboBoxImage(Image comboBoxImage)

      Sets the ComboBox drop down icon

      Parameters
      • comboBoxImage: the drop down icon
    • setUIID

      public void setUIID(String uiid)

      This method sets the Component the Unique identifier. This method should be used before a component has been initialized

      Parameters
      • id: UIID unique identifier for component type
      Overrides:
      setUIID in class Component
    • getBaseline

      public int getBaseline(int width, int height)

      The baseline for the component text according to which it should be aligned with other components for best visual look.

      Parameters
      • width: the component width

      • height: the component height

      Returns

      baseline value from the top of the component

      Overrides:
      getBaseline in class Component
    • laidOut

      protected void laidOut()
      This is a callback method to inform the Component when it's been laidout on the parent Container
      Overrides:
      laidOut in class List<T>
    • getSelectedRect

      public Rectangle getSelectedRect()

      Returns the component bounds with absolute screen coordinates, for components that include an internal selection behavior and are not containers (currently only List) this method allows returning the position of the selection itself which is useful for things such as the popup dialog and similar UI's that need to reference the position of the selection externally

      Returns

      the bounds of the component with absolute screen coordinates

      Overrides:
      getSelectedRect in class List<T>
    • getVisibleBounds

      protected Rectangle getVisibleBounds()

      Returns the component bounds for scrolling which might differ from the getBounds for large components e.g. list.

      Returns

      the component bounds

      See also
      • #getX

      • #getY

      • #getVisibleBounds(com.codename1.ui.geom.Rectangle)

      Overrides:
      getVisibleBounds in class List<T>
    • setSelectedIndex

      public void setSelectedIndex(int selection)

      Sets the current selected offset in the list, by default this implementation will scroll the list to the selection if the selection is outside of the screen

      Parameters
      • index: the current selected offset in the list
      Overrides:
      setSelectedIndex in class List<T>
    • setSelectedIndex

      public void setSelectedIndex(int selection, boolean scroll)

      Sets the current selected offset in the list

      Parameters
      • index: the current selected offset in the list

      • scrollToSelection: @param scrollToSelection indicates whether scrolling to selection should occur if the selection is outside of view

      Overrides:
      setSelectedIndex in class List<T>
    • pointerHover

      public void pointerHover(int[] x, int[] y)

      Invoked for devices where the pointer can hover without actually clicking the display. This is true for PC mouse pointer as well as some devices such as the BB storm.

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerHover in class List<T>
    • pointerHoverReleased

      public void pointerHoverReleased(int[] x, int[] y)

      Invoked for devices where the pointer can hover without actually clicking the display. This is true for PC mouse pointer as well as some devices such as the BB storm.

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerHoverReleased in class List<T>
    • createPopupDialog

      protected Dialog createPopupDialog(List<T> l)

      Subclasses can override this method to change the creation of the dialog

      Parameters
      • l: the list of the popup
      Returns

      a dialog instance

    • isShowingPopupDialog

      public boolean isShowingPopupDialog()

      Returns true if the popup dialog is currently showing for this combobox.

      Since

      8.0

    • showPopupDialog

      protected Command showPopupDialog(Dialog popupDialog, List l)

      Shows the popup dialog for the combo box and returns the resulting command. This method can be overriden by subclasses to modify the behavior of the class.

      Parameters
      • popupDialog: the popup dialog

      • l: the list within

      Returns

      the selected command

    • fireClicked

      protected void fireClicked()
      When working in 3 softbutton mode "fire" key (center softbutton) is sent to this method in order to allow 3 button devices to work properly. When overriding this method you should also override isSelectableInteraction to indicate that a command is placed appropriately on top of the fire key for 3 soft button phones.
      Overrides:
      fireClicked in class List<T>
    • createPopupList

      protected List<T> createPopupList()

      Creates the list object used within the popup dialog. This method allows subclasses to customize the list creation for the popup dialog shown when the combo box is pressed.

      Returns

      a newly created list object used when the user presses the combo box.

    • keyReleased

      public void keyReleased(int keyCode)

      If this Component is focused, the key released event will call this method

      Parameters
      • keyCode: the key code value to indicate a physical key.
      Overrides:
      keyReleased in class List<T>
    • pointerPressed

      public void pointerPressed(int x, int y)

      If this Component is focused, the pointer pressed event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerPressed in class List<T>
    • pointerDragged

      public void pointerDragged(int x, int y)

      If this Component is focused, the pointer dragged event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerDragged in class List<T>
    • pointerReleased

      public void pointerReleased(int x, int y)

      If this Component is focused, the pointer released event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerReleased in class List<T>
    • paint

      public void paint(Graphics g)

      This method paints the Component on the screen, it should be overriden by subclasses to perform custom drawing or invoke the UI API's to let the PLAF perform the rendering.

      Parameters
      • g: the component graphics
      Specified by:
      paint in interface Animation
      Overrides:
      paint in class List<T>
    • calcPreferredSize

      protected Dimension calcPreferredSize()

      Calculates the preferred size based on component content. This method is invoked lazily by getPreferred size.

      Returns

      the calculated preferred size based on component content

      Overrides:
      calcPreferredSize in class List<T>
    • getOrientation

      public int getOrientation()

      Returns the list orientation

      Returns

      the list orientation HORIZONTAL or VERTICAL

      See also
      • #HORIZONTAL

      • #VERTICAL

      Overrides:
      getOrientation in class List<T>
    • isIncludeSelectCancel

      public boolean isIncludeSelectCancel()

      Indicates whethe the soft buttons for select/cancel should appear for the combo box

      Returns

      true if the soft buttons for select/cancel should appear for the combo box

    • setIncludeSelectCancel

      public void setIncludeSelectCancel(boolean includeSelectCancel)

      Indicates whethe the soft buttons for select/cancel should appear for the combo box

      Parameters
      • includeSelectCancel: the new value
    • isActAsSpinnerDialog

      public boolean isActAsSpinnerDialog()

      When this flag is active the combo box acts as a button that opens a dialog that looks like a spinner this allows creating user interfaces for touch devices where a spinner UI approach is more common than a combo box paradigm.

      Returns

      the actAsSpinnerDialog

    • setActAsSpinnerDialog

      public void setActAsSpinnerDialog(boolean actAsSpinnerDialog)

      When this flag is active the combo box acts as a button that opens a dialog that looks like a spinner this allows creating user interfaces for touch devices where a spinner UI approach is more common than a combo box paradigm.

      Parameters
      • actAsSpinnerDialog: the actAsSpinnerDialog to set