sábado, 4 de agosto de 2012

Usar un JComboBox() con Clases propias en Java


JComboBox del paquete Swing nos genera una Lista Desplegable, ComboBox o tambien llamado Dropdownlist. La funcionalidad default de esta clase es un poco limitada si es que queremos desplegar objetos de nuestras Clases. Para poder usar nuestras propias clases en él debemos implementar la interface ComboBoxModel.
La clase que quieramos mostrar tenemos que sobreescribir el metodo toString(), que es lo que aparecerá como elemento en la lista desplegable. 
En mi caso necesitaba mostrar en una lista las Funciones Objetivos que se encuentar almacenadas en la Base de Datos del Sistema.
Aqui el código de la Clase FOComboModel que implementa ComboBoxModel:

    import java.util.ArrayList;
    import javax.swing.ComboBoxModel;
    import javax.swing.event.ListDataEvent;
    import javax.swing.event.ListDataListener;
    import ags.core.FuncionObjetivo;
    
    public class FOComboModel implements ComboBoxModel  {
    
        private ArrayList<FuncionObjetivo> data = new ArrayList<FuncionObjetivo>();
        private ArrayList<ListDataListener> list = new ArrayList<ListDataListener>();
        private FuncionObjetivo selectedItem;
        
        public FOComboModel(ArrayList<FuncionObjetivo> data) {
            this.data = data;
        }
    
        public int getSize() {
            return data.size();
        }
    
        public Object getElementAt(int index) {
            return data.get(index);
        }
    
        public Object getSelectedItem() {
            return selectedItem;
        }
    
        public void setSelectedItem(Object elItem) {
            selectedItem = elItem instanceof FuncionObjetivo ? (FuncionObjetivo) elItem : null;
            for (ListDataListener l : list) {
                l.contentsChanged(new ListDataEvent(this, javax.swing.event.ListDataEvent.CONTENTS_CHANGED, 0, 0));
            }  
        }
        
        public void addListDataListener(ListDataListener l) {
            list.add(l);
        }
        
        public void removeListDataListener(ListDataListener l) {
            list.remove(l);
        }
    
    
    } // Fin Class FOComboModel
    

Con esto al momento de crear un JComboBox usamos nuestro propio ComboBoxModel, y podemos usar los mismos metodos que con el default, getSelectedItem() como se ha implementado, regresa el objeto que se ha seleccionado en la Lista Desplegable y podemos obener su Id con su geter definido. Aquí muestro mi codigo para mostrar una lista de Funciones Objetivo de mi Sistema:

// Definimos el ComboBox y el ComboModel
 private JComboBox jComboBox1;
 private FOComboModel foComboModel;

// Instanciamos el ComboModel
 foComboModel = new FOComboModel(foService.getFuncionesObjetivo());

// Instaciamos el ComboBox
    jComboBox1 = new JComboBox();
    getContentPane().add(jComboBox1);
    jComboBox1.setModel(foComboModel);

// En la funcion ActionListener revisar el elemento seleccionado
  FuncionObjetivo foSel;
  foSel = (FuncionObjetivo)jComboBox1.getSelectedItem()

Por ultimo la pantalla en Swing con el ComboBox usando la Clase FuncionObjetivo se ve así:



Para más informacion consultar The Java™ Tutorials.

No hay comentarios:

Publicar un comentario