The Swing equivalent of the AWT 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.
Use
Here in how you use JComboBox:
Learning More
Sun’s Javadoc on the
JComboBox class : available:
Sun’s Javadoc on the
BasicComboBoxEditor class : available:
Sun’s Javadoc on the
BasicComboBoxRenderer class : available:
Sun’s Javadoc on the
DefaultComboBoxModel class : available: