Un ComboBox no editable desactiva el tecleo pero aún así permite al usuario seleccionar un valor desde una lista. Esto proporciona un espacio altenartivo a un grupo de radio buttons o una list.
Aquí puedes ver una imagen de una aplicación que utiliza un ComboBox editable para introducir un patrón con el que formatear fechas.
|
Intenta esto:
|
Abajo podemos ver el código de
ComboBoxDemo.java que crea y configura el ComboBox:
String[] patternExamples = {
"dd MMMMM yyyy",
"dd.MM.yy",
"MM/dd/yy",
"yyyy.MM.dd G 'at' hh:mm:ss z",
"EEE, MMM d, ''yy",
"h:mm a",
"H:mm:ss:SSS",
"K:mm a,z",
"yyyy.MMMMM.dd GGG hh:mm aaa"
};
currentPattern = patternExamples[0];
. . .
JComboBox patternList = new JComboBox(patternExamples);
patternList.setEditable(true);
patternList.setSelectedIndex(0);
patternList.setAlignmentX(Component.LEFT_ALIGNMENT);
PatternListener patternListener = new PatternListener();
patternList.addActionListener(patternListener);
Este programa proporciona los valores para la lista desplegable del ComboBox con un array de strings. Sin embargo, los valores de la lista pueden ser cualquier Object, en cuyo caso el método toString de la clase Object proporciona el texto a mostrar. Para poner una imagen u otro valor que no sea texto en una lista ComboBox, sólo debemos proporcionar un celda personalizada renderizada con setRenderer.
Observa que el código activa explícitamente la edición para que el usuario pueda teclear valores. Esto es necesario porque, por defecto, un ComboBox no es editable. Este ejemplo particular permite editar el ComboBox porque su lista no proporciona todos los patrones de formateo de fechas posibles.
El código también registra un oyente de action con el ComboBox. Cuando un usuario selecciona un ítem del ComboBox, se llama a este método:
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String newSelection = (String)cb.getSelectedItem();
currentPattern = newSelection;
reformat();
}
El método llama a getSelectedItem para obtener el nuevo patrón elegido por el usuario, y utilizarlo para reformatear la fecha y la hora actuales.
Cuidado: Un ComboBox es un componente compuesto: comprende un botón, un menú desplegable, y cuando es editable, un campo de texto. El ComboBox dispara eventos de alto nivel, como eventos action. Sus componentes disparan eventos de bajo nivel como mouse, key y eventos de foco. Normalmente los componentes compuestos como el ComboBox deberían proporcionar oyentes para los eventos de alto nivel, porque los eventos de bajo nivel y los subcomponentes que los disparan son dependientes del sistema.
Aquí podemos ver una imagen de una aplicación que utiliza un ComboBox no editable para permitir al usuario elegir una imagen de mascota desde una lista:
Abajo podemos ver el código de ComboBoxDemo2.java que crea y configura el ComboBox:
![]()
Intenta esto:
- Compila y ejecuta el programa: ComboBoxDemo2.java. También necesitarás 5 ficheros de imágenes: Bird.gif, Cat.gif, Dog.gif, Rabbit.gif, and Pig.gif.
- Eleige una mascota desde la lista desplegable para ver su dibujo.
- Cómo usar Radio Buttons proporciona una versión de este programa, RadioButtonDemo.java, que utiliza un grupo de botones de rádio en lugar de un ComboBox. Compila y ejecuta el programa. Compara el código fuente y la operación de los dos programas.
... //in the ComboBoxDemo2 constructor String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; // Crea el combobox, // desactiva la edición // y selecciona el primero JComboBox petList = new JComboBox(petStrings); petList.setSelectedIndex(0);Este código es similar al código de ComboBoxDemo. Sin embargo, este programa deja el ComboBox no editable (por defecto).Se utiliza un ComboBox no editable en lugar de un grupo de botones de radio para mostrar una o más elecciones en estas situaciones:
- Cuando el espacio es limitado
- Cuando el número de elecciones posibles es grande
- Cuando la lista se crea durante la ejecución
Las siguientes tablas listan los métodos y constructores más utilizados de JComboBox. Otros métodos a los que nos gustaría llamar están definidos por las clases JComponent y Component.El API para utilizar ComboBox se divide en dos categorías:
Seleccionar u Obtener Ítems de la Lista del ComboBox Método Propósito JComboBox(ComboBoxModel)
JComboBox(Object[])
JComboBox(Vector)Crea un ComboBox con una lista predeterminada. void addItem(Object)
void insertItemAt(Object, int)Añade o inserta un ítem en la lista. Object getItemAt(int)
Object getSelectedItem()Obtiene un ítem de la lista. void removeAllItems()
void removeItemAt(int)
void removeItem(Object)Elimina uno o más ítems de la lista. int getItemCount() Obtiene el número de ítems de la lista. void setModel(ComboBoxModel)
ComboBoxModel getModel()Selecciona u obtiene el modelo de datos que proporciona los ítems de la lista.
Personalizar la Configuración del ComboBox Método Propósito void setEditabe(boolean)
boolean isEditable()Selecciona u Obtiene si el usuario puede teclear en el ComboBox. void setRenderer(ListCellRenderer)
ListCellRenderer getRenderer()Selecciona u obtiene el objeto responsable para crear el ítem seleccionado en el ComboBox. Utilizado cuando el ComboBox no es editable. void setEditor(ComboBoxEditor)
ComboBoxEditor getEditor()Selecciona u obtiene el objeto responsable del pintado y edición del ítem seleccionado en el ComboBox. Esto sólo se utiliza cuando el ComboBox es editable.
Esta tabla muestra ejemplos que utilizan JComboBox y dónde se pueden encontrar.
Ejemplos Dónde se describe Notas ComboBoxDemo.java Esta página. Un ComboBox editable. ComboBoxDemo2.java Esta página. Un ComboBox no editable. LayeredPaneDemo.java Cómo usar Layered Panes Un ComboBox no editable. TableRenderDemo.java Cómo usar Tablas Muestra como utilizar un ComboBox como un editor de celdas de una tabla.