The Swing equivalent of the AWT (Advanced Windowing Toolkit) Choice. A JComboBox is a component that
combines a button or editable field and a drop-down list. The user can select a value
from the drop-down list, which appears at the user’s request. If you make the
combo box editable, then the combo box includes an editable field into which the user
can type a value, thus allowing the user to select something that was not one of the
original choices.
The name is misleading. JComboBox does
not let you select combinations of options, the way you can with a
JList, just a single option. The combo-moniker comes from
the fact it has a combination write in field and select from pre-existing
choices.
JList is similar to JComboBox, except JComboBox drops down
where JList does not. Further, JList permits multiple selections where JComboBox does not.
To control how the choices are displayed, you can write a custom ListCellRenderer, based on BasicComboBoxRenderer.
To control how the new write-in field possibility is keyed, you can write a custom
ComboBoxEditor based on BasicComboBoxEditor.
JComboBox uses setSelectedItem instead of select.
getSelectedItem returns an Object you must cast to a String. The use
of Objects for your choices allows more flexibility in rendering the choices.
Gotchas
- Beware of the JComboBox(Vector<?>) constructor. It does not simply make a copy of the
Vector. Any changes you make to the JComboBox model will also modify that Vector.
- JComboBox.setSelectedItem
will trigger an ActionEvent that is immediately
dispatched, even before your event handler completes. This is almost never what
you want. You usually need to create some mechanism to ignore the event.
Otherwise you can get a situation I call fibrillation
where events trigger events in an uncontrolled way.
Keying enums with JComboBox
Here is how to let the user select an enum in a
GUI (Graphic User Interface) using JComboBox.
Use
Here is how to use a JComboBox with simple Strings as the possible choices.
Learning More
Oracle’s Javadoc on
JComboBox class : available:
Oracle’s Javadoc on
BasicComboBoxEditor class : available:
Oracle’s Javadoc on
BasicComboBoxRenderer class : available:
Oracle’s Javadoc on
DefaultComboBoxModel class : available:
Oracle’s Javadoc on
ComboBoxModel interface : available: