2009-09-04 9 views
19

Tengo una JTable con JLabel[][] como datos. Ahora quiero detectar un doble clic en JLabel o en una celda de la tabla (pero solo en una de las columnas). ¿Cómo puedo agregar un Action/MouseListener en JLabel respectivamente celda de la tabla?ActionListener en JLabel o JTable cell

+0

JLabels no tiene ActionListeners, pero tiene MouseListener, agréguelos y escuchen en mouseClick – Telcontar

Respuesta

56

¿Qué tal:

table.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
    if (e.getClickCount() == 2) { 
     JTable target = (JTable)e.getSource(); 
     int row = target.getSelectedRow(); 
     int column = target.getSelectedColumn(); 
     // do some action if appropriate column 
    } 
    } 
}); 
+0

si tengo ese Jlabel dentro de la celda de tabla, entonces, ¿cómo llamaré a ese evento de clic al hacer clic? – Krishna

+1

como sigue @Camickr comentario, creo que es mejor utilizar el método MousePressed no MouseClick –

26

Básicamente la misma sugerencia como el que ya aceptada, excepto:

a) usted debe manejar mousePressed, no mouseClicked. Un evento MouseClicked solo se activa cuando se genera un evento mousePressed y mouseReleased en la misma ubicación de píxel. Si el usuario mueve el mouse incluso 1 píxel al hacer doble clic, no obtendrá el doble clic esperado.

b) También es posible que desee considerar el uso de los métodos columnAtPoint() y rowAtPoint() para obtener la celda clicada. Aunque probablemente no marque la diferencia en este caso, importará si alguna vez intenta utilizar un MouseListener para hacer clic con el botón derecho del mouse, ya que la selección no se cambia. Entonces, si adquiere el hábito de usar este método, no tendrá problemas en el futuro.