Bien, en C# las cosas están mejor organizadas que en Java, por ende tendrás que hacer algunas cosillas extras.
1 Creación de entidad Categoria
Paquete modelo.entidades;
Crea una clase Categoria, que encapsula el id y la descripción de la misma.
public class Categoria {
private int id;
private String description;
public Categoria() {
}
public Categoria(int id, String description) {
this.id = id;
this.description = description;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return description;
}
}
El método toString
es importante ya que lo que retorna será lo que se muestre como valor en el combobox.
2 Consultando a la BBDD y parseando los registros a objetos Categoria
Paquete modelo.dao
Crea un método (de preferencia en una clase del Modelo no en la misma vista, ver principio SRP) que devuelva un List
que contenga los datos de la consulta (id y descripción) envueltos en la clase Categoria.
public class CategoriaDao {
public List<Categoria> getALl() {
List<Categoria> categorias = new ArrayList<>();
String sql = "SELECT id, descripcion FROM categorias";
try (Connection conn = DBUtils.get();
Statement stmt = conn.createStatement()){
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
Categoria categoria = new Categoria();
// 'id' y 'descripcion' son los nombres de las
// columnas en la tabla 'categorias'
categoria.setId(rs.getString("id"));
categoria.setDescription(rs.getString("descripcion"));
}
} catch(SQLException e) {
e.printStackTrace();
}
return categorias;
}
}
Para obtener la conexión creamos una clase que nos la provea.
Paquete modelo.db
public class DBUtils {
private static final String HOST = "jdbc:mysql://localhost:3306/";
private static final String USER = "root";
private static final String PASS = "";
private static final String DB = "tu_bbdd";
public Connection get() {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(HOST + DB, USER, PASS);
}
}
Ahora llama a éste método desde tu vista para ponerlos en el combo.
3. Añadiendo los objetos al ComboBox
Como no sé si usas Swing o JavaFX te pondré para ambos.
Swing
- Itera el List conteniendo los objetos Categoria.
- Agrega los valores al combobox.
CategoriaDao dao = new CategoriaDao();
// es el modelo de datos que acepta el combo
Vector<Categoria> modelo = new Vector<>(dao.getAll());
JComboBox cboCategorias = new JComboBox(modelo);
Y eso eso todo. Ahora, cuando obtengas un valor del combobox solo has un cast a Categoria
:
cboCategorias.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
JComboBox combo = (JComboBox) e.getSource();
Categoria seleccionada = (Categoria) combo.getSelectedItem();
// hacer algo con la categoría seleccionada
}
});
La razón de por qué hacer un cast a Categoria: (Categoria) combo.getSelectedItem();
es porque por defecto el método combo.getSelectedItem devuelve un objeto Object
, entonces es necesario convertir el objecto Object a Categoria.
JavaFX
En JavaFX es más sencillo. Primero se debe crear una ObservableList
que actuará como modelo de datos del combo.
CategoriaDao dao = new CategoriaDao();
private final ObservableList<Categoria> modelo =
FXCollections.observableArrayList<>(dao.getAll());
Y se lo añadimos al combo
ComboBox<Categoria> cboCategorias = new ComboBox<>(modelo);
Y eso es todo. El evento para el combobox de JavaFX es así:
cboCategorias.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<Employee>() {
@Override
public void changed(ObservableValue<? extends Categoria> arg0, Categoria arg1, Categoria arg2) {
if (arg2 != null) {
Categoria seleccionada = arg2;
// hacer algo con la categoría seleccionada
}
}
});
Espero te haya servido. Saludos.