Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/03/2008, 04:32
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Re: rellenar combo box

El tutorial de java...
http://java.sun.com/docs/books/tutor.../combobox.html

-----------------------

Un ejemplo.. directamente de un ResultSet... :

1. Una Clase "ResultSetComboBoxModelObject", se va a instanciar 1 por cada registro regresado de la base de datos.
2. La Clase "ResultSetComboBoxModel" implementa "ComboBoxModel", el constructor recibe un Recordset y el nombre de dos campos en la base de datos que debe ser el primero numérico y el segundo de texto. Permite buscar por el código o la descripcion. Y permite obtener el código o la descripción del "item" seleccionado. Muestra solo la descripción.

Un objeto donde se guardan los registros de la base de datos.

Código:
/*
 * ResultSetComboBoxModelObject.java
 */

package com.xxxx.xxxx.Library;

/**
 * ResultSet ComboBoxModel Object
 * @author Yo
 * @version 1.0
 */
public class ResultSetComboBoxModelObject {

    private Integer codigo;
    private String descri;

    public ResultSetComboBoxModelObject(Integer codigo, String descri) {
        this.codigo = codigo;
        this.descri = descri;
    }

    @Override
    public String toString() {
        return this.getDescri();
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getDescri() {
        return descri;
    }

    public void setDescri(String descri) {
        this.descri = descri;
    }
}
El modelo que se adjunta al ComboBox.

Código:
/*
 * ResultSetComboBoxModel.java
 */

package com.xxxx.xxxx.Library;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

/**
 * ResultSet ComboBoxModel
 * @author Yo
 * @version 1.0
 */
public class ResultSetComboBoxModel implements ComboBoxModel {

    private Vector<ResultSetComboBoxModelObject> data = new Vector<ResultSetComboBoxModelObject>();
    private Vector<ListDataListener> list = new Vector<ListDataListener>();
    private ResultSetComboBoxModelObject selectedItem;

    public ResultSetComboBoxModel(ResultSet r, String codigo, String descri) throws SQLException {
        r.beforeFirst();
        while (r.next()) {
            data.add(new ResultSetComboBoxModelObject(r.getInt(codigo), r.getString(descri)));
        }
    }

    public ResultSetComboBoxModelObject searchSelectedItem(Integer i) {
        for (ResultSetComboBoxModelObject o : data) {
            if (i.equals(o.getCodigo())) {
                return o;
            }
        }
        return null;
    }

    public ResultSetComboBoxModelObject searchSelectedItem(String s) {
        for (ResultSetComboBoxModelObject o : data) {
            if (s.equals(o.getDescri())) {
                return o;
            }
        }
        return null;
    }

    public void setSelectedItem(Object anItem) {
        selectedItem = anItem instanceof ResultSetComboBoxModelObject ? (ResultSetComboBoxModelObject) anItem : null;
        for (ListDataListener l : list) {
            l.contentsChanged(new ListDataEvent(this, javax.swing.event.ListDataEvent.CONTENTS_CHANGED, 0, 0));
        }
    }

    public Object getSelectedItem() {
        return selectedItem;
    }

    public int getSize() {
        return data.size();
    }

    public Object getElementAt(int index) {
        return data.get(index);
    }

    public void addListDataListener(ListDataListener l) {
        list.add(l);
    }

    public void removeListDataListener(ListDataListener l) {
        list.remove(l);
    }

    public Integer getSelectedCodigo() {
        return selectedItem == null ? null : selectedItem.getCodigo();
    }

    public String getSelectedDescri() {
        return selectedItem == null ? null : selectedItem.getDescri();
    }
}
Y la forma de usarlo ...

Código:
jComboBox1 = new com.xxxx.xxxx.Library.JComboBox();
jComboBox1.setModel(new ResultSetComboBoxModel(MyResultSet.executeQuery(), "codtar", "destar"));
// Aquí MyResultSet es un callable statement que regresa un ResultSet, "codtar" y "destar" son
los nombres de los campos en la base de datos.
para obtener el código del item seleccionado ...

Código:
((ResultSetComboBoxModelObject)jComboBox1.getSelectedItem()).getCodigo()
getSelectedItem puede ser nulo.
para seleccionar un item por el código (por ejemplo 100) ...

Código:
jComboBox1.setSelectedItem(((ResultSetComboBoxModel)jComboBox1.getModel()).searchSelectedItem(100));
para seleccionar ningún codigo ...

Código:
jComboBox1.setSelectedItem(null);
Saludos,

Última edición por HackmanC; 06/03/2008 a las 15:42 Razón: edit