web-dev-qa-db-fra.com

ActionListener sur jlabel ou cellule jtalienne

J'ai une jtalie avec JLabel[][] comme données. Maintenant, je veux détecter un double clic sur Jlabel ou une cellule de table (mais uniquement dans l'une des colonnes). Comment puis-je ajouter une action/mouselistener sur jlabel respectivement cellule de table?

22
stefita

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
    }
  }
});
62
Vinay Sajip

Fondamentalement la même suggestion que celle déjà acceptée sauf:

a) Vous devez gérer les souris impressionnés et non mouscliqués. Un événement mouseClicé est uniquement viré lorsqu'un événement de souris et de mousserélied est généré sur le même emplacement de pixel. Vous si l'utilisateur déplace la souris, même 1 pixel tout en double-cliquant, vous n'obtiendrez pas le double clic attendu.

b) De plus, vous voudrez peut-être envisager d'utiliser les méthodes ColuminApoint () et RowatPoint () pour obtenir la cellule cliquée. Bien que cela ne fait probablement pas une différence dans ce cas, cela importera si vous essayez jamais d'utiliser un Mouselisteneur pour les clics de souris droit, 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.

27
camickr