2009-09-04 11 views
19

Ho una tabella J con JLabel[][] come dati. Ora voglio rilevare un doppio clic su JLabel o su una cella di tabella (ma solo in una delle colonne). Come posso aggiungere un'azione/MouseListener su JLabel rispettivamente alla cella di tabella?ActionListener nella cella JLabel o JTable

+0

JLabels non ha ActionListeners, ma ha MouseListener, li aggiunge e ascolta su mouseClick – Telcontar

risposta

56

ne dite:

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

se ho Jlabel all'interno della cella Tabella, come chiamerò quell'evento click al clic? – Krishna

+1

come sotto commento @Camickr, penso che sia meglio usare il metodo MousePressed non MouseClick –

26

In sostanza la stessa suggestione di quello già accettato, tranne:

a) si dovrebbe gestire mousePressed, non mouseClicked. Un evento mouseClicked viene attivato solo quando viene generato un evento mousePressed e mouseReleased nella stessa posizione di pixel. Se l'utente sposta il mouse di 1 solo pixel mentre fa doppio clic non si ottiene il doppio clic previsto.

b) Inoltre, è possibile prendere in considerazione l'utilizzo dei metodi columnAtPoint() e rowAtPoint() per ottenere la cella selezionata. Anche se probabilmente non fa la differenza in questo caso, sarà importante se provi a utilizzare MouseListener per i clic con il tasto destro del mouse, poiché la selezione non viene modificata. Quindi, se abitui ad usare questo metodo, non avrai problemi in futuro.

Problemi correlati