2017-08-14 1 views
0

J'ai un JTable avec ListSelectionModel et ListSelectionListener.ListSelectionModel et listener

Le modèle de sélection est défini dans le constructeur JTables: lsm.getSelectionModel()

et ListSelectionListener est réglée par une méthode publique:

public void setListSelectionListener(ListSelectionListener l){ 
     lsm.addListSelectionListener(l); 
    } 

appelé de la classe contrôleur:

view.setTableSelectionListener(new ListSelectionListener(){ 
     @Override 
     public void valueChanged(ListSelectionEvent e){ 
      if (!e.getValueIsAdjusting()) { 
       int viewRow = e.getFirstIndex(); 
       System.out.println(viewRow + " is selected");     
      } 
     } 
    }); 

parce que l'écouteur est créé dans une autre classe Je ne peux pas utiliser la méthode getSelectedRow(); de JTable, mais en utilisant l'objet ListSelectionEvent de getFirstIndex(); n'obtient évidemment pas la sélection actuelle.

Je me sers maintenant int viewRow = ((ListSelectionModel)e.getSource()).getLeadSelectionIndex());

Est-ce que semble comme la bonne façon d'obtenir la sélection en cours? Cela semble fonctionner, mais je ne suis pas sûr que ce soit une mauvaise façon de le faire. Merci

Répondre

0

Seuls getMinSelectionIndex() et getMaxSelectionIndex() fonctionnent, ce qui renvoie les min et max des index sélectionnés respectivement. L'index sélectionné par le lead/anchor peut être> = 0 même s'il n'y a pas de ligne sélectionnée.