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: