Java - Cargar datos en ComboBox no repetidos

 
Vista:
sin imagen de perfil
Val: 17
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar datos en ComboBox no repetidos

Publicado por Luis David (11 intervenciones) el 12/06/2018 16:40:11
Tengo un objeto Coche que tiene atributos Matrícula, marca, modelo, nombre_cliente y fecha_entrada. Quiero poder filtrar en una combobox los objetos coches mediante las marcas que existan. He conseguido mostrar todas las marcas existentes pero repetidas. La lista se obtiene de una base de datos ¿Como puedo obtener esas marcas sin repetir?. He pensado en realizar una consulta SQL. Muestro el código que tengo y el resultado, como ya he dicho de Marcas repetidas.

Esto es lo que tengo asignado en el ComboBox

1
2
3
4
5
6
7
8
9
JComboBox comboBox = new JComboBox();
CarDAOImp imp = new CarDAOImp();
List<CarDTO> lista = imp.getAll();
for (int i = 0; i < lista.size(); i++) {
    comboBox.addItem(lista.get(i).getMarca());
}
 
comboBox.setBounds(38, 119, 358, 19);
panel_Filtar.add(comboBox);

Y lo que obtengo es esto:


Sin-titulo


El método llamado de imp.getAll() es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Override
public List<CarDTO> getAll() {
 
    List<CarDTO> coches = new LinkedList<CarDTO>();
 
    try {
        Statement statement = (Statement) connection.createStatement();
        ResultSet resultSet = ((java.sql.Statement) statement).executeQuery(FIND_ALL);
 
        CarDTO coche = null;
 
        while (resultSet.next()) {
            coche = new CarDTO();
 
            coche.setMatricula(resultSet.getString("Matricula"));
            coche.setMarca(resultSet.getString("Marca"));
            coche.setModelo(resultSet.getString("Modelo"));
            coche.setNombre_Cliente(resultSet.getString("Nombre_cliente"));
            coche.setFecha_Entrada(resultSet.getString("Fecha_Entrada"));
 
 
            System.out.println(coche.toString());
 
            coches.add(coche);
        }
 
        resultSet.close();
        (statement).close();
 
 
    } catch (SQLException e) {
        //e.printStackTrace();
        throw new RuntimeException(e);
    }
 
    return coches;

GRACIAS DE ANTEMANO!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar datos en ComboBox no repetidos

Publicado por Yamil Bracho (2315 intervenciones) el 12/06/2018 17:05:19
Puedes hacer algo como :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
JComboBox comboBox = new JComboBox();
CarDAOImp imp = new CarDAOImp();
List<CarDTO> lista = imp.getAll();
 
ArrayList<String> marcaList = new ArrayList<String>();
for (CarDTO car) {
   string marca = car.getMarca();
	if (!marcaList.contains(marca)) {
	   marcaList.add(marca);
	}
}
 
for(String marca : marcaList) {
   comboBox.addItem(marca);
}
 
comboBox.setBounds(38, 119, 358, 19);
panel_Filtar.add(comboBox);

Puedes usar tambien Guava, o Java 8
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Cargar datos en ComboBox no repetidos

Publicado por Tom (1831 intervenciones) el 12/06/2018 18:11:34
El problema será cuando tengas 1.000.000 entradas en tu BD.
Yo haría un método adicional para obtener las marcas (un SELECT DISTINCT MARCA ... ORDER BY MARCA).
En algo como:

public List<String> getAllBrands()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 17
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar datos en ComboBox no repetidos

Publicado por Luis David (11 intervenciones) el 12/06/2018 18:16:32
Me ha servido de mucha ayuda. He realizado un SQL agrupando las marcas y de esta manera no se mostraban repetidas. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar