es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir cualquier cosa en JComboBox

Quiero poder escribir cualquier cosa en un JComboBox, incluso introducción que no exista en el menú desplegable. Necesito esto porque necesito la función de sugerencias en el menú desplegable. Tengo una API que me proporciona datos (resultados de búsqueda). Cuando busco una palabra clave, necesito sugerencias en un menú desplegable que he gestionado con un modelo personalizado, pero el JComboBox solo me permite escribir una entrada que ya existe en el menú desplegable. ¿Cómo puedo hacer que el combobox permita cualquier entrada?

Editar:

Para aclarar lo que quiero que haga mi programa: escribo una palabra en una barra de búsqueda y hago clic en buscar. A través de una conexión a mi API, busca si hay resultados coincidentes. Si los hay, quiero que los muestre en una lista desplegable. De modo que no hay alternativas fijas para elegir en el combobox, como color, país, etc., sino que buscas y luego aparecen las alternativas. Algo así sin incluir demasiados detalles:

JPanel panel = new JPanel();
JButton search = new JButton("Buscar");
JComboBox list = new JComboBox();
AutoCompleteDecorator.decorate(list);
list.setEditable(true);
panel.add(search);
panel.add(list);

search.addActionListener(e->{
//conecta con la API, lee la entrada en la barra de búsqueda, busca la entrada en la API
ArrayList nombre = //lista de todos los resultados coincidentes de la API
list.setModel(new ComboBoxModel(nombre));
});
Pero esto no funciona porque el combobox no me permite escribir lo que quiera en el campo, solo me permite escribir palabras que ya están almacenadas en el combobox, que en mi caso son ninguna para empezar. Me he asegurado de que las otras partes (el modelo, la API) funcionen, así que es solo que quiero que el campo de texto sea “más editable”.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si desea permitir al usuario ingresar cualquier valor en un JComboBox, incluso si no existe en las opciones desplegables, debe establecer la propiedad editable de JComboBox en true. Esta propiedad permite al usuario editar el campo de texto del combo box y escribir cualquier valor que deseen.

    Puede hacer esto simplemente llamando al método setEditable(true) en su objeto JComboBox. Esto habilitará el combobox para aceptar cualquier entrada y mostrará una lista desplegable de resultados de búsqueda coincidentes basados en la entrada del usuario.

    En su caso, ya ha establecido la propiedad editable en true para su JComboBox, pero aún solo permite la entrada que ya existe en la lista desplegable. Esto se debe probablemente al ComboBoxModel que está utilizando, el cual restringe las opciones disponibles en la lista desplegable.

    Para resolver esto, puede crear un ComboBoxModel personalizado que permita cualquier entrada y luego establecer este modelo como el modelo de datos para su JComboBox. Esto se puede hacer utilizando el método setModel().

    Aquí tienes un ejemplo de cómo puedes crear un ComboBoxModel personalizado que permita cualquier entrada:

    public class AnyInputComboBoxModel extends DefaultComboBoxModel {
    
        public AnyInputComboBoxModel() {
            super();
        }
    
        @Override
        public void setSelectedItem(Object anObject) {
            if (anObject != null) {
                // Establecer el elemento seleccionado como la entrada del usuario
                super.setSelectedItem(anObject);
                // Agregar la entrada del usuario a las opciones desplegables si aún no existe
                if (getIndexOf(anObject) == -1) {
                    insertElementAt(anObject, 0);
                    setSelectedItem(anObject);
                }
            }
        }
    }
    

    Este ComboBoxModel anula el método setSelectedItem() para permitir cualquier entrada y agrega la entrada del usuario a las opciones desplegables si aún no existe.

    Para usar este modelo, crea una nueva instancia de AnyInputComboBoxModel y establecela como el modelo para tu JComboBox:

    JComboBox list = new JComboBox(new AnyInputComboBoxModel());
    

    Ahora tu JComboBox debería permitir cualquier entrada y mostrará una lista desplegable de resultados de búsqueda coincidentes basados en la entrada del usuario.

Comments are closed.