# Class ComboBox<T>

java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.control.Control
javafx.scene.control.ComboBoxBase<T>
javafx.scene.control.ComboBox<T>

Type Parameters:
  `T` - The type of the value that has been selected or otherwise entered in to this ComboBox

All Implemented Interfaces:
  `Styleable`, `EventTarget`, `Skinnable`

public class ComboBox<T> extends ComboBoxBase<T>
An implementation of the `ComboBoxBase` abstract class for the most common form of ComboBox, where a popup list is shown to users providing them with a choice that they may select from. For more information around the general concepts and API of ComboBox, refer to the `ComboBoxBase` class documentation.

On top of ComboBoxBase, the ComboBox class introduces additional API. Most importantly, it adds an `items` property that works in much the same way as the ListView `items` property. In other words, it is the content of the items list that is displayed to users when they click on the ComboBox button.

The ComboBox exposes the `ComboBoxBase.valueProperty()` from `ComboBoxBase`, but there are some important points of the value property that need to be understood in relation to ComboBox. These include:

1. The value property is not constrained to items contained within the items list - it can be anything as long as it is a valid value of type T.
2. If the value property is set to a non-null object, and subsequently the items list is cleared, the value property is not nulled out.
3. Clearing the `selection` in the selection model does not null the value property - it remains the same as before.
4. It is valid for the selection model to have a selection set to a given index even if there is no items in the list (or less items in the list than the given index). Once the items list is further populated, such that the list contains enough items to have an item in the given index, both the selection model `SelectionModel.selectedItemProperty()` and value property will be updated to have this value. This is inconsistent with other controls that use a selection model, but done intentionally for ComboBox.

By default, when the popup list is showing, the maximum number of rows visible is 10, but this can be changed by modifying the `visibleRowCount` property. If the number of items in the ComboBox is less than the value of `visibleRowCount`, then the items size will be used instead so that the popup list is not exceedingly long.

As with ListView, it is possible to modify the `selection model` that is used, although this is likely to be rarely changed. This is because the ComboBox enforces the need for a `SingleSelectionModel` instance, and it is not likely that there is much need for alternate implementations. Nonetheless, the option is there should use cases be found for switching the selection model.

As the ComboBox internally renders content with a ListView, API exists in the ComboBox class to allow for a custom cell factory to be set. For more information on cell factories, refer to the `Cell` and `ListCell` classes. It is important to note that if a cell factory is set on a ComboBox, cells will only be used in the ListView that shows when the ComboBox is clicked. If you also want to customize the rendering of the 'button' area of the ComboBox, you can set a custom `ListCell` instance in the `button cell` property. One way of doing this is with the following code (note the use of `setButtonCell`:

     Callback<ListView<String>, ListCell<String>> cellFactory = ...;
     ComboBox comboBox = new ComboBox();
     comboBox.setItems(items);
     comboBox.setButtonCell(cellFactory.call(null));
     comboBox.setCellFactory(cellFactory);

Because a ComboBox can be `editable`, and the default means of allowing user input is via a `TextField`, a `string converter` property is provided to allow for developers to specify how to translate a users string into an object of type T, such that the `value` property may contain it. By default the converter simply returns the String input as the user typed it, which therefore assumes that the type of the editable ComboBox is String. If a different type is specified and the ComboBox is to be editable, it is necessary to specify a custom `StringConverter`.

## Warning: Nodes should not be inserted directly into the ComboBox items list

`ComboBox` allows for the items list to contain elements of any type, including `Node` instances. Putting nodes into the items list is strongly discouraged, as it can lead to unexpected results. This is because the default `cell factory` simply inserts Node items directly into the cell, including in the ComboBox 'button' area too. Because the scenegraph only allows for Nodes to be in one place at a time, this means that when an item is selected it becomes removed from the ComboBox list, and becomes visible in the button area. When selection changes the previously selected item returns to the list and the new selection is removed.

Important points to note:

- Avoid inserting `Node` instances directly into the `ComboBox` items list or its data model.
- The recommended approach is to put the relevant information into the items list, and provide a custom `cell factory` to create the nodes for a given cell and update them on demand using the data stored in the item for that cell.
- Avoid creating new `Node`s in the `updateItem` method of a custom `cell factory`.

The following minimal example shows how to create a custom cell factory for `ComboBox` containing `Node`s:

     ComboBox<Color> cmb = new ComboBox<>();
     cmb.getItems().addAll(
         Color.RED,
         Color.GREEN,
         Color.BLUE);

     cmb.setCellFactory(p -> {
         return new ListCell<>() {
             private final Rectangle rectangle;
             {
                 setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                 rectangle = new Rectangle(10, 10);
             }

             @Override protected void updateItem(Color item, boolean empty) {
                 super.updateItem(item, empty);

                 if (item == null || empty) {
                     setGraphic(null);
                 } else {
                     rectangle.setFill(item);
                     setGraphic(rectangle);
                 }
             }
         };
     });

This example has an anonymous custom `ListCell` class in the custom cell factory. Note that the `Rectangle` (`Node`) object needs to be created in the instance initialization block or the constructor of the custom `ListCell` class and updated/used in its `updateItem` method.

Admittedly the above approach is far more verbose, but it offers the required functionality without encountering the scenegraph constraints.

Since:
  JavaFX 2.1
See Also:
  - `ComboBoxBase`
  - `Cell`
  - `ListCell`
  - `StringConverter`

- ## Property Summary

  Properties
  Type
  Property
  Description
  `final ObjectProperty<ListCell<T>>`
  `buttonCell`
  The button cell is used to render what is shown in the ComboBox 'button' area.
  `final ObjectProperty<Callback<ListView<T>, ListCell<T>>>`
  `cellFactory`
  Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox.
  `final ObjectProperty<StringConverter<T>>`
  `converter`
  Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
  `final ReadOnlyObjectProperty<TextField>`
  `editor`
  The editor for the ComboBox.
  `final ObjectProperty<ObservableList<T>>`
  `items`
  The list of items to show within the ComboBox popup.
  `final ObjectProperty<Node>`
  `placeholder`
  This Node is shown to the user when the ComboBox has no content to show.
  `final ObjectProperty<SingleSelectionModel<T>>`
  `selectionModel`
  The selection model for the ComboBox.
  `final IntegerProperty`
  `visibleRowCount`
  The maximum number of rows to be visible in the ComboBox popup when it is showing.

  ### Properties declared in class javafx.scene.control.ComboBoxBase

  `armed, editable, onAction, onHidden, onHiding, onShowing, onShown, promptText, showing, value`

  ### Properties declared in class javafx.scene.control.Control

  `contextMenu, skin, tooltip`

  ### Properties declared in class javafx.scene.layout.Region

  `background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width`

  ### Properties declared in class javafx.scene.Parent

  `needsLayout`

  ### Properties declared in class javafx.scene.Node

  `accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, focusVisible, focusWithin, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible`

- ## Field Summary

  ### Fields declared in class javafx.scene.control.ComboBoxBase

  `ON_HIDDEN, ON_HIDING, ON_SHOWING, ON_SHOWN`

  ### Fields declared in class javafx.scene.layout.Region

  `USE_COMPUTED_SIZE, USE_PREF_SIZE`

  ### Fields declared in class javafx.scene.Node

  `BASELINE_OFFSET_SAME_AS_HEIGHT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ComboBox()`
  Creates a default ComboBox instance with an empty `items` list and default `selection model`.
  `ComboBox(ObservableList<T> items)`
  Creates a default ComboBox instance with the provided items list and a default `selection model`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final ObjectProperty<ListCell<T>>`
  `buttonCellProperty()`
  The button cell is used to render what is shown in the ComboBox 'button' area.
  `final void`
  `cancelEdit()`
  If the ComboBox is `editable`, calling this method will attempt to replace the editor text with the last committed `value`.
  `final ObjectProperty<Callback<ListView<T>, ListCell<T>>>`
  `cellFactoryProperty()`
  Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox.
  `final void`
  `commitValue()`
  If the ComboBox is `editable`, calling this method will attempt to commit the current text and convert it to a `value`.
  `final ObjectProperty<StringConverter<T>>`
  `converterProperty()`
  Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
  `final ReadOnlyObjectProperty<TextField>`
  `editorProperty()`
  The editor for the ComboBox.
  `final ListCell<T>`
  `getButtonCell()`
  Gets the value of the `buttonCell` property.
  `final Callback<ListView<T>, ListCell<T>>`
  `getCellFactory()`
  Gets the value of the `cellFactory` property.
  `final StringConverter<T>`
  `getConverter()`
  Gets the value of the `converter` property.
  `final TextField`
  `getEditor()`
  Gets the value of the `editor` property.
  `final ObservableList<T>`
  `getItems()`
  Gets the value of the `items` property.
  `final Node`
  `getPlaceholder()`
  Gets the value of the `placeholder` property.
  `final SingleSelectionModel<T>`
  `getSelectionModel()`
  Gets the value of the `selectionModel` property.
  `final int`
  `getVisibleRowCount()`
  Gets the value of the `visibleRowCount` property.
  `final ObjectProperty<ObservableList<T>>`
  `itemsProperty()`
  The list of items to show within the ComboBox popup.
  `final ObjectProperty<Node>`
  `placeholderProperty()`
  This Node is shown to the user when the ComboBox has no content to show.
  `final ObjectProperty<SingleSelectionModel<T>>`
  `selectionModelProperty()`
  The selection model for the ComboBox.
  `final void`
  `setButtonCell(ListCell<T> value)`
  Sets the value of the `buttonCell` property.
  `final void`
  `setCellFactory(Callback<ListView<T>, ListCell<T>> value)`
  Sets the value of the `cellFactory` property.
  `final void`
  `setConverter(StringConverter<T> value)`
  Sets the value of the `converter` property.
  `final void`
  `setItems(ObservableList<T> value)`
  Sets the value of the `items` property.
  `final void`
  `setPlaceholder(Node value)`
  Sets the value of the `placeholder` property.
  `final void`
  `setSelectionModel(SingleSelectionModel<T> value)`
  Sets the value of the `selectionModel` property.
  `final void`
  `setVisibleRowCount(int value)`
  Sets the value of the `visibleRowCount` property.
  `final IntegerProperty`
  `visibleRowCountProperty()`
  The maximum number of rows to be visible in the ComboBox popup when it is showing.

  ### Methods declared in class javafx.scene.control.ComboBoxBase

  `arm, armedProperty, disarm, editableProperty, getOnAction, getOnHidden, getOnHiding, getOnShowing, getOnShown, getPromptText, getValue, hide, isArmed, isEditable, isShowing, onActionProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, promptTextProperty, setEditable, setOnAction, setOnHidden, setOnHiding, setOnShowing, setOnShown, setPromptText, setValue, show, showingProperty, valueProperty`

  ### Methods declared in class javafx.scene.control.Control

  `computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, contextMenuProperty, createDefaultSkin, getClassCssMetaData, getContextMenu, getControlCssMetaData, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty`

  ### Methods declared in class javafx.scene.layout.Region

  `backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computePrefHeight, computePrefWidth, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, 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 declared in class javafx.scene.Parent

  `getBaselineOffset, getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, layoutChildren, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds`

  ### Methods declared in 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, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, 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, isFocusVisible, isFocusWithin, 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, lookup, 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, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, requestFocusTraversal, 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 declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods declared in interface javafx.css.Styleable

  `getStyleableNode`

- ## Property Details

  - ### items

    public final ObjectProperty<ObservableList<T>> itemsProperty
    The list of items to show within the ComboBox popup.
    See Also:
      - `getItems()`
      - `setItems(ObservableList)`
      - `itemsProperty()`

  - ### converter

    public final ObjectProperty<StringConverter<T>> converterProperty
    Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
    See Also:
      - `getConverter()`
      - `setConverter(StringConverter)`
      - `converterProperty()`

  - ### cellFactory

    public final ObjectProperty<Callback<ListView<T>, ListCell<T>>> cellFactoryProperty
    Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox. Refer to the `Cell` javadoc for more information on cell factories.
    See Also:
      - `getCellFactory()`
      - `setCellFactory(Callback)`
      - `cellFactoryProperty()`

  - ### buttonCell

    public final ObjectProperty<ListCell<T>> buttonCellProperty
    The button cell is used to render what is shown in the ComboBox 'button' area. If a cell is set here, it does not change the rendering of the ComboBox popup list - that rendering is controlled via the `cell factory` API.
    Since:
      JavaFX 2.2
    See Also:
      - `getButtonCell()`
      - `setButtonCell(ListCell)`
      - `buttonCellProperty()`

  - ### selectionModel

    public final ObjectProperty<SingleSelectionModel<T>> selectionModelProperty
    The selection model for the ComboBox. A ComboBox only supports single selection.
    See Also:
      - `getSelectionModel()`
      - `setSelectionModel(SingleSelectionModel)`
      - `selectionModelProperty()`

  - ### visibleRowCount

    public final IntegerProperty visibleRowCountProperty
    The maximum number of rows to be visible in the ComboBox popup when it is showing. By default this value is 10, but this can be changed to increase or decrease the height of the popup.
    See Also:
      - `getVisibleRowCount()`
      - `setVisibleRowCount(int)`
      - `visibleRowCountProperty()`

  - ### editor

    public final ReadOnlyObjectProperty<TextField> editorProperty
    The editor for the ComboBox. The editor is null if the ComboBox is not `editable`.
    Since:
      JavaFX 2.2
    See Also:
      - `getEditor()`
      - `editorProperty()`

  - ### placeholder

    public final ObjectProperty<Node> placeholderProperty
    This Node is shown to the user when the ComboBox has no content to show. The placeholder node is shown in the ComboBox popup area when the items list is null or empty.
    Since:
      JavaFX 8.0
    See Also:
      - `getPlaceholder()`
      - `setPlaceholder(Node)`
      - `placeholderProperty()`

- ## Constructor Details

  - ### ComboBox

    public ComboBox()
    Creates a default ComboBox instance with an empty `items` list and default `selection model`.

  - ### ComboBox

    public ComboBox(ObservableList<T> items)
    Creates a default ComboBox instance with the provided items list and a default `selection model`.
    Parameters:
      `items` - the list of items

- ## Method Details

  - ### setItems

    public final void setItems(ObservableList<T> value)
    Sets the value of the `items` property.
    Property description:
      The list of items to show within the ComboBox popup.
    Parameters:
      `value` - the value for the `items` property
    See Also:
      - `getItems()`
      - `itemsProperty()`

  - ### getItems

    public final ObservableList<T> getItems()
    Gets the value of the `items` property.
    Property description:
      The list of items to show within the ComboBox popup.
    Returns:
      the value of the `items` property
    See Also:
      - `setItems(ObservableList)`
      - `itemsProperty()`

  - ### itemsProperty

    public final ObjectProperty<ObservableList<T>> itemsProperty()
    The list of items to show within the ComboBox popup.
    Returns:
      the `items` property
    See Also:
      - `getItems()`
      - `setItems(ObservableList)`

  - ### converterProperty

    public final ObjectProperty<StringConverter<T>> converterProperty()
    Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
    Returns:
      the converter property
    See Also:
      - `getConverter()`
      - `setConverter(StringConverter)`

  - ### setConverter

    public final void setConverter(StringConverter<T> value)
    Sets the value of the `converter` property.
    Property description:
      Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
    Parameters:
      `value` - the value for the `converter` property
    See Also:
      - `getConverter()`
      - `converterProperty()`

  - ### getConverter

    public final StringConverter<T> getConverter()
    Gets the value of the `converter` property.
    Property description:
      Converts the user-typed input (when the ComboBox is `editable`) to an object of type T, such that the input may be retrieved via the `value` property.
    Returns:
      the value of the `converter` property
    See Also:
      - `setConverter(StringConverter)`
      - `converterProperty()`

  - ### setCellFactory

    public final void setCellFactory(Callback<ListView<T>, ListCell<T>> value)
    Sets the value of the `cellFactory` property.
    Property description:
      Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox. Refer to the `Cell` javadoc for more information on cell factories.
    Parameters:
      `value` - the value for the `cellFactory` property
    See Also:
      - `getCellFactory()`
      - `cellFactoryProperty()`

  - ### getCellFactory

    public final Callback<ListView<T>, ListCell<T>> getCellFactory()
    Gets the value of the `cellFactory` property.
    Property description:
      Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox. Refer to the `Cell` javadoc for more information on cell factories.
    Returns:
      the value of the `cellFactory` property
    See Also:
      - `setCellFactory(Callback)`
      - `cellFactoryProperty()`

  - ### cellFactoryProperty

    public final ObjectProperty<Callback<ListView<T>, ListCell<T>>> cellFactoryProperty()
    Providing a custom cell factory allows for complete customization of the rendering of items in the ComboBox. Refer to the `Cell` javadoc for more information on cell factories.
    Returns:
      the `cellFactory` property
    See Also:
      - `getCellFactory()`
      - `setCellFactory(Callback)`

  - ### buttonCellProperty

    public final ObjectProperty<ListCell<T>> buttonCellProperty()
    The button cell is used to render what is shown in the ComboBox 'button' area. If a cell is set here, it does not change the rendering of the ComboBox popup list - that rendering is controlled via the `cell factory` API.
    Returns:
      the button cell property
    Since:
      JavaFX 2.2
    See Also:
      - `getButtonCell()`
      - `setButtonCell(ListCell)`

  - ### setButtonCell

    public final void setButtonCell(ListCell<T> value)
    Sets the value of the `buttonCell` property.
    Property description:
      The button cell is used to render what is shown in the ComboBox 'button' area. If a cell is set here, it does not change the rendering of the ComboBox popup list - that rendering is controlled via the `cell factory` API.
    Parameters:
      `value` - the value for the `buttonCell` property
    Since:
      JavaFX 2.2
    See Also:
      - `getButtonCell()`
      - `buttonCellProperty()`

  - ### getButtonCell

    public final ListCell<T> getButtonCell()
    Gets the value of the `buttonCell` property.
    Property description:
      The button cell is used to render what is shown in the ComboBox 'button' area. If a cell is set here, it does not change the rendering of the ComboBox popup list - that rendering is controlled via the `cell factory` API.
    Returns:
      the value of the `buttonCell` property
    Since:
      JavaFX 2.2
    See Also:
      - `setButtonCell(ListCell)`
      - `buttonCellProperty()`

  - ### setSelectionModel

    public final void setSelectionModel(SingleSelectionModel<T> value)
    Sets the value of the `selectionModel` property.
    Property description:
      The selection model for the ComboBox. A ComboBox only supports single selection.
    Parameters:
      `value` - the value for the `selectionModel` property
    See Also:
      - `getSelectionModel()`
      - `selectionModelProperty()`

  - ### getSelectionModel

    public final SingleSelectionModel<T> getSelectionModel()
    Gets the value of the `selectionModel` property.
    Property description:
      The selection model for the ComboBox. A ComboBox only supports single selection.
    Returns:
      the value of the `selectionModel` property
    See Also:
      - `setSelectionModel(SingleSelectionModel)`
      - `selectionModelProperty()`

  - ### selectionModelProperty

    public final ObjectProperty<SingleSelectionModel<T>> selectionModelProperty()
    The selection model for the ComboBox. A ComboBox only supports single selection.
    Returns:
      the `selectionModel` property
    See Also:
      - `getSelectionModel()`
      - `setSelectionModel(SingleSelectionModel)`

  - ### setVisibleRowCount

    public final void setVisibleRowCount(int value)
    Sets the value of the `visibleRowCount` property.
    Property description:
      The maximum number of rows to be visible in the ComboBox popup when it is showing. By default this value is 10, but this can be changed to increase or decrease the height of the popup.
    Parameters:
      `value` - the value for the `visibleRowCount` property
    See Also:
      - `getVisibleRowCount()`
      - `visibleRowCountProperty()`

  - ### getVisibleRowCount

    public final int getVisibleRowCount()
    Gets the value of the `visibleRowCount` property.
    Property description:
      The maximum number of rows to be visible in the ComboBox popup when it is showing. By default this value is 10, but this can be changed to increase or decrease the height of the popup.
    Returns:
      the value of the `visibleRowCount` property
    See Also:
      - `setVisibleRowCount(int)`
      - `visibleRowCountProperty()`

  - ### visibleRowCountProperty

    public final IntegerProperty visibleRowCountProperty()
    The maximum number of rows to be visible in the ComboBox popup when it is showing. By default this value is 10, but this can be changed to increase or decrease the height of the popup.
    Returns:
      the `visibleRowCount` property
    See Also:
      - `getVisibleRowCount()`
      - `setVisibleRowCount(int)`

  - ### getEditor

    public final TextField getEditor()
    Gets the value of the `editor` property.
    Property description:
      The editor for the ComboBox. The editor is null if the ComboBox is not `editable`.
    Returns:
      the value of the `editor` property
    Since:
      JavaFX 2.2
    See Also:
      - `editorProperty()`

  - ### editorProperty

    public final ReadOnlyObjectProperty<TextField> editorProperty()
    The editor for the ComboBox. The editor is null if the ComboBox is not `editable`.
    Returns:
      the `editor` property
    Since:
      JavaFX 2.2
    See Also:
      - `getEditor()`

  - ### placeholderProperty

    public final ObjectProperty<Node> placeholderProperty()
    This Node is shown to the user when the ComboBox has no content to show. The placeholder node is shown in the ComboBox popup area when the items list is null or empty.
    Returns:
      the placeholder property
    Since:
      JavaFX 8.0
    See Also:
      - `getPlaceholder()`
      - `setPlaceholder(Node)`

  - ### setPlaceholder

    public final void setPlaceholder(Node value)
    Sets the value of the `placeholder` property.
    Property description:
      This Node is shown to the user when the ComboBox has no content to show. The placeholder node is shown in the ComboBox popup area when the items list is null or empty.
    Parameters:
      `value` - the value for the `placeholder` property
    Since:
      JavaFX 8.0
    See Also:
      - `getPlaceholder()`
      - `placeholderProperty()`

  - ### getPlaceholder

    public final Node getPlaceholder()
    Gets the value of the `placeholder` property.
    Property description:
      This Node is shown to the user when the ComboBox has no content to show. The placeholder node is shown in the ComboBox popup area when the items list is null or empty.
    Returns:
      the value of the `placeholder` property
    Since:
      JavaFX 8.0
    See Also:
      - `setPlaceholder(Node)`
      - `placeholderProperty()`

  - ### commitValue

    public final void commitValue()
    If the ComboBox is `editable`, calling this method will attempt to commit the current text and convert it to a `value`.
    Since:
      9

  - ### cancelEdit

    public final void cancelEdit()
    If the ComboBox is `editable`, calling this method will attempt to replace the editor text with the last committed `value`.
    Since:
      9