Java - Problema con comboBox

   
Vista:

Problema con comboBox

Publicado por Juan (18 intervenciones) el 11/10/2018 18:17:14
Buenas tardes.Tengo un problema con un comboBox.Al arrancar el programa relleno un comboBox desde una consulta de una Base de datos.Hasta hay todo bien.
El caso es que quiero hacer que cuando se elige un fabricante del comboBox rellenar un label con una foto y no se con qué evento lo puedo hacer.
Os pongo una parte del código.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class Maquinas extends javax.swing.JDialog {
 
    ArrayList<Fabricante> listaFabricantes = new ArrayList<Fabricante>();
 
    public Maquinas(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
 
        this.setLocationRelativeTo(null);
        crearListaFabricantes();
 
    }
 
    public void crearListaFabricantes() {
        this.listaFabricantes.clear();
        HashMap<Integer, Fabricante> resultados;
 
        try {
            resultados = FabricantesDAO.consultarTodos();
            if (resultados.size() > 0) {
                for (Fabricante obj : resultados.values()) {
                    int id = obj.getId();
                    String nombre = obj.getNombre();
                    String direccion = obj.getDireccion();
                    String codigoPostal = obj.getCodigoPostal();
                    String poblacion = obj.getPoblacion();
                    int provincia = obj.getProvincia();
                    String telefono = obj.getTelefono();
                    String telefonoMovil = obj.getTelefonoMovil();
                    String email = obj.getEmail();
 
                    Fabricante objFabricante = new Fabricante(id, nombre, direccion, codigoPostal, poblacion, provincia, telefono, telefonoMovil, email);
                    this.listaFabricantes.add(objFabricante);
 
                }
                //Insertamos en el comboBox la lista de los fabricantes.
                for (int indx = 0; indx < this.listaFabricantes.size(); indx++) {
                    this.cbxFabricante.addItem(this.listaFabricantes.get(indx).getNombre());
                }
                //Seleccionamos el indice -1 del comboBox para que no aparezca ningun Fabricante por defecto.
                this.cbxFabricante.setSelectedIndex(-1);
 
            } else {
                JOptionPane.showMessageDialog(null, "Ningun fabricante encontrado!!!!. ", "ERROR!!!",
                        JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception ex) {
            Logger.getLogger(Fabricante.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }

Si hago este evento en cuanto ejecuto el programa me viene aquí y me pone una foto sin elegir ningún fabricante.

1
2
3
4
5
6
7
8
9
10
11
private void cbxFabricanteActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    try {
        // TODO add your handling code here:
        String fabricante = this.cbxFabricante.getSelectedItem().toString();
        Fabricante obj = FabricantesDAO.filtrarFabricanteNombre(fabricante);
        this.lblLogoFabricante.setIcon(obj.getLogo());
    } catch (Exception ex) {
        Logger.getLogger(Maquinas.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Si pongo este otro evento me pasa lo mismo:

1
2
3
4
5
6
7
8
9
10
11
private void cbxFabricanteKeyPressed(java.awt.event.KeyEvent evt) {
    // TODO add your handling code here:
    try {
        // TODO add your handling code here:
        String fabricante = this.cbxFabricante.getSelectedItem().toString();
        Fabricante obj = FabricantesDAO.filtrarFabricanteNombre(fabricante);
        this.lblLogoFabricante.setIcon(obj.getLogo());
    } catch (Exception ex) {
        Logger.getLogger(Maquinas.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Alguien me puede ayudar?

Gracias.
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

Problema con comboBox

Publicado por Yamil Bracho (2193 intervenciones) el 11/10/2018 18:35:30
Tu clase debe impmementar ActionListener
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

Problema con comboBox

Publicado por Juan (18 intervenciones) el 11/10/2018 18:49:01
Me puedes decir como lo hago?
entiendo que hago esto:
public class Maquinas extends javax.swing.JDialog implements ActionListener{

y luego?

Muchas 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

Problema con comboBox

Publicado por Tom (1245 intervenciones) el 11/10/2018 19:43:38
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

Problema con comboBox

Publicado por Juan (18 intervenciones) el 15/10/2018 17:18:51
Muchas gracias con contestar Tom, he estado mirando la pagina de Oracle pero la verdad es que no me entero de nada. Podrías intentar explicarme poco a poco.
Como podrás observar estoy en un nivel mas bien novato en la programación.

Muchas 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

Problema con comboBox

Publicado por Marco (20 intervenciones) el 11/10/2018 22:16:34
Hola veo que si tienes los escucha en cada boton y lo estas haciendo bien.
De donde estas trayendo la imagen desde la base de datos o desde una ruta.
Si lo estas trayendo desde una ruta.
Ejemplo:

https://stackoverflow.com/questions/15182329/how-to-set-icon-to-a-jlabel-from-an-image-from-a-folder

Nota: podrias ocupar los stream para generar menos codigo.


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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class Maquinas extends javax.swing.JDialog {
 
    private ArrayList<Fabricante> listaFabricantes;
    private HashMap<Integer, Fabricante> resultados;
 
    public Maquinas(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        this.setLocationRelativeTo(null);
        crearListaFabricantes();
    }
 
 
    public void crearListaFabricantes() {
        listaFabricantes = new ArrayList<>();
        this.listaFabricantes.clear();
        try {
            //Llenamos el hashMap
            resultados = FabricantesDAO.consultarTodos();
            /*
            *Agregamos los datos pertenicientes a la clase Fabricante
            *a la lista de fabricante
            *Es mejor si utilizas los herramientas que vienen desde jdk 8 (stream)
            *Java:HashMap.entrySet() Método que devuelve una vista del HashMap en formato colección. Cualquier modificación en la vista afecta directamente al contenido del HashMap.
            *Java:stream() Interface Stream que representa un conjunto de datos el cual soporta operaciones secuenciales o paralelas de agregación 
            *Java:Stream.filter() Devuelve un Stream que contiene los datos una vez se ejecute el filtro especificado por el Lambda del predicado. Es una operación intermedia.
            *Java:Stream.sorted() sorted() : ordena los elementos del flujo usando ordenación natural. La clase de elemento debe implementar una interfaz Comparable .
            *Java:comparingByKey() Metodo auto descriptivo
            *Java:Stream.forEachOrdered() Stream forEachOrdered (acción del consumidor)
            * realiza una acción para cada elemento de este stream,
            * en el orden de encuentro del stream si el stream tiene un orden de encuentro definido.
            * Stream forEachOrdered (acción del consumidor) es una operación de terminal
            */
            resultados
                .entrySet()
                .stream()
                .filter( x -> x != null)
                .sorted(Map.Entry.comparingByKey())
                .forEachOrdered(s -> {
                    listaFabricantes.add( new Fabricante(s.getValues().getId(),s.getValues().getNombre(),
                                                         s.getValues().getDireccion(),s.getValues().getCodigoPostal(),
                                                         s.getValues().getPoblacion(),s.getValues().getTelefono(),
                                                         s.getValues.getTelefonoMovil,s.getValues().getEmail()));
                });
 
                listaFabricantes
                .stream()
                .forEach(f -> {
                    cbxFabricante.addItem(f.getNombre());
                });
                cbxFabricante.setSelectedIndex(0);
            } catch(Exception e) {
 
            }
        }
 
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
private void cbxFabricanteActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        // TODO add your handling code here:
        String fabricante = (String) cbxFabricante.getSelectedItem();//Se utiliza(String) para convertir el valor obtenido del combo a una cadena de caracteres
        Fabricante obj = FabricantesDAO.filtrarFabricanteNombre(fabricante);
        this.lblLogoFabricante.setIcon(obj.getLogo());
    } catch (Exception ex) {
        Logger.getLogger(Maquinas.class.getName()).log(Level.SEVERE, null, ex);
 
    }
 
}

Saludos.....
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

Problema con comboBox

Publicado por Juan (18 intervenciones) el 15/10/2018 17:19:52
Buenas tardes Marco, los datos los tengo en una base de datos.

Muchas 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

Problema con comboBox

Publicado por Juan (18 intervenciones) el 15/10/2018 17:48:49
Ya lo he solucionado.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class Maquinas extends javax.swing.JDialog implements ItemListener {
 
    ArrayList<Fabricante> listaFabricantes = new ArrayList<Fabricante>();
 
    public Maquinas(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
 
        //Centra la pantalla.
        this.setLocationRelativeTo(null);
 
        crearListaFabricantes();
 
        this.cbxFabricante.addItemListener(this);
        this.cbxLocales.addItemListener(this);
    }
 
    public void crearListaFabricantes() {
        this.listaFabricantes.clear();
        HashMap<Integer, Fabricante> resultados;
 
        try {
            resultados = FabricantesDAO.consultarTodos();
            if (resultados.size() > 0) {
                for (Fabricante obj : resultados.values()) {
                    int id = obj.getId();
                    String nombre = obj.getNombre();
                    String direccion = obj.getDireccion();
                    String codigoPostal = obj.getCodigoPostal();
                    String poblacion = obj.getPoblacion();
                    int provincia = obj.getProvincia();
                    String telefono = obj.getTelefono();
                    String telefonoMovil = obj.getTelefonoMovil();
                    String email = obj.getEmail();
 
                    Fabricante objFabricante = new Fabricante(id, nombre, direccion, codigoPostal, poblacion, provincia, telefono, telefonoMovil, email);
                    this.listaFabricantes.add(objFabricante);
 
                }
                //Insertamos en el comboBox la lista de los fabricantes.
                for (int indx = 0; indx < this.listaFabricantes.size(); indx++) {
                    this.cbxFabricante.addItem(this.listaFabricantes.get(indx).getNombre());
                }
                //Seleccionamos el indice -1 del comboBox para que no aparezca ningun Fabricante por defecto.
                this.cbxFabricante.setSelectedIndex(-1);
 
            } else {
                JOptionPane.showMessageDialog(null, "Ningun fabricante encontrado!!!!. ", "ERROR!!!",
                        JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception ex) {
            Logger.getLogger(Fabricante.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
 
    public void itemStateChanged(ItemEvent e) {
            try {
            String fabricante = this.cbxFabricante.getSelectedItem().toString();
            Fabricante obj = FabricantesDAO.filtrarFabricanteNombre(fabricante);
            this.lblLogoFabricante.setIcon(obj.getLogo());
        } catch (Exception ex) {
            Logger.getLogger(Maquinas.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
Muchas Gracias a todos por lo ayuda.
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
Revisar política de publicidad