Java - añadir evento mouseListener a multiples objetos

 
Vista:

añadir evento mouseListener a multiples objetos

Publicado por cesarthrash (1 intervención) el 15/11/2017 07:16:07
Que tal, pues ando buscando un poco de luz en el tema, sucede que estoy realizando un sistema para un negocio, el cual incluye un catalogo de productos, los cuales son leidos desde una BD.

Hice esto por partes, primero me asegure de poder generar y agregar los componentes visibles en la GUI (JLabels a los cuales les puse una imagen de prueba)

Hecho esto ya me di a la tarea de conectar a la BD y mediante un boton agregar el componente visible en la GUI y asu vez añadir el dato a la BD, el cual esta asociado al componente mediante el nombre del producto.

Hasta aqui todo bien, funciona siempre y cuando se agregue el producto, no asi cuando es leído desde la BD

En el constructor de mi clase he puesto un metodo para recuperar desde la ejecucion los productos de la BD, pero se supone cada componente deberia tener su propio MouseListener, y al ejecutar me recupera todos los productos pero solo el ultimo componente parece tener el ML, algo muy raro dado que use exactamente el mismo codigo cuando se presiona el boton agregar y esto no pasaba.
Les dejo el codigo en cuestion, ojala puedan echarme una mano. De antemano gracias


Nota: La accion de crear el componente y añadirle el evento esta dentro de un ciclo while que monitoriza el estado de un ResultSet.
Nota 2: Si, esta a medio camino, no está terminado, algunas cosas hacen referencia a otras clases donde llevo los datos que me interesan

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public void getProductos(int categoria){
    System.out.println("Llamada a base");
    String query = "SELECT id_producto, nombre_producto, nombre_categoria, descripcion_producto, precio_producto FROM productos join categorias on productos.categoria_producto=categorias.id_categoria where id_categoria = ?";
    try{
        pstm = Conexion.prepareStatement(query);
        pstm.setInt(1,categoria);
        rs = pstm.executeQuery();
        while (rs.next()){
	        System.out.println ("Id: "+rs.getInt (1) + " nombre:" + rs.getString (2)+ " categoria:" + rs.getString(3)+ " descripcion:"+ rs.getString(4)+" precio:"+rs.getInt(5));
 
	        int cat=catalogo.Jtabpane.getSelectedIndex();
 
	        try {
	        System.out.println("Llamada a base");
 
	            casilla = new JLabel(new ImageIcon(getClass().getResource("/main/defecto.jpg"))); //reemplazar!!
	            casilla.setBounds(30, 20, 10, 10);
	            casilla.setToolTipText(rs.getString(2));
	            casilla.setBorder(BorderFactory.createRaisedBevelBorder());
 
	            casilla.addMouseListener(new MouseListener(){
 
		        public void mouseClicked(MouseEvent arg0){
 
		            if(arg0.getClickCount()==1){
		                System.out.println("Entrado evento clic");
		                X=casilla.getBounds().x;
		                Y=casilla.getBounds().y;
 
		                catalogo.ltemp.setText(Integer.toString(X));
		                catalogo.ltemp2.setText(Integer.toString(Y));
		                catalogo.lblpeproceso.setText(casilla.getToolTipText());
 
 
		                System.out.println("pos X"+X);
		                System.out.println("pos Y"+Y);
 
 
		            }
		        }
 
 
		        public void mousePressed(MouseEvent e) {
 
		        }
 
 
		        public void mouseReleased(MouseEvent e) {
 
		        }
 
 
		        public void mouseEntered(MouseEvent e) {
 
		        }
 
 
		        public void mouseExited(MouseEvent e) {
 
		        }
 
	            });
	        } catch (SQLException ex) {
	            Logger.getLogger(catalogo.class.getName()).log(Level.SEVERE, null, ex);
	        }
 
	        switch(cat+1){
	            case 1:
	                catalogo.pnlPizzas.add(casilla);
 
 
	                break;
	            case 2:
 
	                break;
	            case 3:
 
	                break;
 
	        }
 
	    }
 
    }catch(SQLException ex){
 
    }finally{
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException sqlEx) { } // ignore
 
            rs = null;
        }
 
        if (pstm != null) {
            try {
                pstm.close();
            } catch (SQLException sqlEx) { } // ignore
 
            pstm = null;
        }
    }
 
}
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