2009-09-04 10 views
19

J'ai une JTable avec JLabel[][] comme donnée. Maintenant, je veux détecter un double clic sur le JLabel ou une cellule de tableau (mais seulement dans l'une des colonnes). Comment puis-je ajouter un Action/MouseListener sur une cellule de tableau JLabel?ActionListener sur une cellule JLabel ou JTable

+0

Les JLabels n'ont pas d'ActionListeners, mais ont MouseListener, les ajoutent et écoutent sur mouseClick – Telcontar

Répondre

56

Que diriez-vous:

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 j'ai ce Jlabel dans la cellule Table alors comment vais-je appeler cet événement click sur click? – Krishna

+1

comme ci-dessous commentaire @Camickr, je pense qu'il est préférable d'utiliser la méthode MousePressed pas MouseClick –

26

En fait la même suggestion que celui déjà accepté, sauf:

a) vous devez gérer mousePressed, non mouseClicked. Un événement mouseClicked est uniquement déclenché lorsqu'un événement mousePressed et mouseReleased est généré au même emplacement de pixel. Vous si l'utilisateur déplace la souris même 1 pixel alors que le double-clic vous n'obtiendrez pas le double-clic attendu.

b) Vous pouvez également envisager d'utiliser les méthodes columnAtPoint() et rowAtPoint() pour obtenir la cellule cliquée. Bien que cela ne fasse probablement pas de différence dans ce cas, cela importera si vous essayez d'utiliser un MouseListener pour des clics de souris, car la sélection n'est pas modifiée. Donc, si vous avez l'habitude d'utiliser cette méthode, vous n'aurez pas de problèmes à l'avenir.

Questions connexes