This utility class can be used to customize a ChoiceBox or
ComboBox and enable the "prefix selection" feature. This will enable
the user to type letters or digits on the keyboard while the ChoiceBox
or ComboBox has the focus.
By default, the ChoiceBox or ComboBox
will attempt to select the first item it can find with a matching prefix ignoring
case.
This feature is available natively on the Windows combo box control, so many users have asked for it. There is a feature request to include this feature into JavaFX (Issue RT-18064). The class is published as part of ContorlsFX to allow testing and feedback.
Let's look at an example to clarify this. The combo box offers the items ["Aaaaa", "Abbbb", "Abccc", "Abcdd", "Abcde"]. The user now types "abc" in quick succession (and then stops typing). The combo box will select a new entry on every key pressed. The first entry it will select is "Aaaaa" since it is the first entry that starts with an "a" (case ignored). It will then select "Abbbb", since this is the first entry that started with "ab" and will finally settle for "Abccc".
| Keys typed | Element selected | |
|---|---|---|
| a | Aaaaa | |
| aaa | Aaaaa | |
| ab | Abbbb | |
| abc | Abccc | |
| xyz | - |
A common use case is to customize a ChoiceBox or ComboBox
that has been loaded as part of an FXML. In this case you can use the utility
methods customize(ChoiceBox) or customize(ComboBox). This
will install a EventHandler that monitors the KeyEvent
events.
If you are coding, you can also use the preconfigured classes
PrefixSelectionChoiceBox and PrefixSelectionComboBox as a
substitute for ChoiceBox and ComboBox.
In this case, PrefixSelectionComboBox includes some properties that will
allow modifying the elapsed time before the selection is clear, listen to back
space to clear the selection, show the popup when the control gains the focus,
or set a different lookup criteria.
PrefixSelectionChoiceBox, PrefixSelectionComboBox
| Modifier and Type | Field and Description |
|---|---|
| public static final BiFunction | |
| public static final BiFunction | |
| public static final int | |
| private static EventHandler | |
| private static final String | |
| private static final Object |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public static void | customize(ComboBox<?>
The comboBox)ComboBox that should be customizedThis will install an |
| public static void | customize(ChoiceBox<?>
The choiceBox)ChoiceBox that should be customizedThis will install an |
| DEFAULT_LOOKUP_CHOICEBOX | back to summary |
|---|---|
| public static final BiFunction<ChoiceBox<T>, String, Optional<T>> DEFAULT_LOOKUP_CHOICEBOX | |
| DEFAULT_LOOKUP_COMBOBOX | back to summary |
|---|---|
| public static final BiFunction<ComboBox<T>, String, Optional<T>> DEFAULT_LOOKUP_COMBOBOX | |
| DEFAULT_TYPING_DELAY | back to summary |
|---|---|
| public static final int DEFAULT_TYPING_DELAY | |
| handler | back to summary |
|---|---|
| private static EventHandler<KeyEvent> handler | |
| SELECTION_PREFIX_STRING | back to summary |
|---|---|
| private static final String SELECTION_PREFIX_STRING | |
| SELECTION_PREFIX_TASK | back to summary |
|---|---|
| private static final Object SELECTION_PREFIX_TASK | |
| PrefixSelectionCustomizer | back to summary |
|---|---|
| public PrefixSelectionCustomizer() | |
| customize | back to summary |
|---|---|
| public static void customize(ComboBox<?> comboBox) This will install an
| |
| customize | back to summary |
|---|---|
| public static void customize(ChoiceBox<?> choiceBox) This will install an
| |