Juan_Pablo15
(Juan Pablo Sepúlveda)
March 29, 2016, 6:49pm
1
Hola!
Tengo un problema con un combobox. Tengo una clase que carga todos los datos de una BD, pero solo lo puedo hacer con una columna de la base de datos, y lo que quiero hacer es algo como esto:
Opción 1
Opción 2
Esta es mi función para obtener los registros:
[code]
public IndexedContainer cargaZonas(){
ResultSet rs = consultazonas.obtenerRegistros();
IndexedContainer t = new IndexedContainer();
try {while (rs.next()) {
t.addItem(rs.getString(2));
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return t;
}
[/code]Y así lleno el combobox:
franja_horaria = new ComboBox();
franja_horaria.setContainerDataSource(cargafranjas.cargaZonas());
Tal vez necesitas algo como lo siguiente:
String itemId = rs.getString(1); // usando el tipo e índice de columna apropiados
String caption = rs.getString(2);
comboBox.addItem(itemId);
comboBox.setItemCaption(itemId, caption);
Juan_Pablo15
(Juan Pablo Sepúlveda)
March 30, 2016, 3:17pm
3
Hola, estoy tratando de hacer lo que me indicas, pero no se donde colocar el
comboBox.setItemCaption(itemId, caption);
Esta es la función de la clase que carga los datos en el combobox:
[code]
public IndexedContainer cargaZonas(){
ResultSet rs = consultazonas.obtenerRegistros();
IndexedContainer t = new IndexedContainer();
try {while (rs.next()) {
String itemId = rs.getString(2);
String caption = rs.getString(3);
t.addItem(itemId);
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return t;
}
[/code]Y esta es la clase vista que tiene el combobox y llama a la función anterior:
franja_horaria = new ComboBox();
franja_horaria.setContainerDataSource(cargafranjas.cargaZonas());
mainLayout.addComponent(franja_horaria, "top:45.0%;left:83.0%");
Hola,
La solución que propuse no requiere que uses un
Container
de forma directa, pero requieres de una referencia al
ComboBox
para llamar a
addItem
y
setItemCaption
.
Saludos!
Juan_Pablo15
(Juan Pablo Sepúlveda)
March 31, 2016, 1:25pm
5
Y en mi caso cómo sería? Necesito agregar el caption al Container y llamarlo desde el Combobox? Disculpa pero soy nuevo en Vaadin y no manejo mucho Java
Algo como:
public void cargaZonas(ComboBox comboBox) {
...
String itemId = rs.getString(1); // usando el tipo e índice de columna apropiados
String caption = rs.getString(2);
comboBox.addItem(itemId);
comboBox.setItemCaption(itemId, caption);
...
}
...
cargaZonas(franja_horaria);
...
Juan_Pablo15
(Juan Pablo Sepúlveda)
March 31, 2016, 2:58pm
7
Hola! He puesto el código pero el ComboBox no me muestra nada, me quedó de la siguiente forma:
ConsultaFranjasCombobox (Modelo):
[code]
public class ConsultaFranjasCombobox {
Conexion conexion = new Conexion();
public ResultSet obtenerRegistros(){
PreparedStatement pst = null;
ResultSet rs = null;
Connection conn = conexion.crear();
String sql = "SELECT * FROM \"FranjasHorarias\"";
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
}
[/code]cargaFranjasCombobox (Controlador):
[code]
public class cargaFranjasCombobox {
ConsultaFranjasCombobox consultafranjas = new ConsultaFranjasCombobox();
public IndexedContainer cargaZonas(ComboBox combobox){
ResultSet rs = consultafranjas.obtenerRegistros();
IndexedContainer t = new IndexedContainer();
try {
while (rs.next()) {
Integer itemId = rs.getInt(2);
String caption = rs.getString(3);
combobox.addItem(itemId);
combobox.setItemCaption(itemId, caption);
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return t;
}
}
[/code]FranjaCombobox (Vista):
cargaFranjasCombobox cargafranjascb = new cargaFranjasCombobox();
franja_horaria = new ComboBox();
franja_horaria.setImmediate(true);
franja_horaria.setContainerDataSource(cargafranjascb.cargaZonas(franja_horaria));
No necesitas el Container ni llamar a setContainerDataSource.
Juan_Pablo15
(Juan Pablo Sepúlveda)
March 31, 2016, 3:18pm
9
Ahora si me resultó!
Muchas gracias por tu ayuda!
Tema solucionado!