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
JComboBox class : available:
Sun’s Javadoc on
BasicComboBoxEditor class : available:
Sun’s Javadoc on
BasicComboBoxRenderer class : available:
Sun’s Javadoc on
DefaultComboBoxModel class : available:
Sun’s Javadoc on
ComboBoxModel interface : available: