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,