2017-05-05 6 views
-1

J'ai un JTable avec MULTIPLE_INTERVAL_SELECTION. J'ai besoin de CONTROL + CLICK pour sélectionner des rangées supplémentaires. Dans mon LAF, cela ne se fait pas automatiquement. J'ai écrit le code suivant qui utilise un écouteur de souris:Utilisation de CTRL + CLIC pour sélectionner plusieurs lignes dans JTable

addMouseListener(new MouseAdapter() 
{ 
    @Override 
    public void mousePressed(MouseEvent event) 
    { 
     ListSelectionModel listSelectionModel = getSelectionModel(); 

     if (listSelectionModel.getSelectionMode() == 
       ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) 
     { 
      if (event.isControlDown()) 
      { 
       int rowView = rowAtPoint(event.getPoint()); 

       if (isRowSelected(rowView)) 
       { 
        System.out.println("rowView already selected"); 

       } 

       listSelectionModel.addSelectionInterval(rowView, rowView); 
      } 
     } 
    } 
}); 

Le problème est que l'événement de sélection de ligne se produit avant que l'auditeur de la souris est saisie. La ligne sur laquelle vous avez cliqué est sélectionnée, mais les sélections précédentes ont été effacées.

Mes questions sont les suivantes:

Comment puis-je capturer l'événement de sélection de by-pass sélection automatique?

Pourrais-je capturer cet événement pour l'empêcher d'effacer les sélections précédentes, utiliser getModifiers() pour voir si la touche CTRL a été enfoncée, et appeler addSelectionInterval?

J'ai besoin d'aide pour identifier et configurer un programme d'écoute pour ce faire.

+0

note ListSelectionModel dans le seul tableau 2D, il peut y avoir des limites sans portions de code personnalisé, alors vous devez jouer avec getSelectedIndices(). Length et get - setAnchor/LeadSelectionIndex par exemple [code by] (http: // stackoverflow. com/a/10793911/714968) @aterai ou [celui-ci] (http://stackoverflow.com/a/7620693/714968) – mKorbel

+0

Vous avez probablement besoin de [consommer] (http://docs.oracle.com/javase /8/docs/api/java/awt/event/InputEvent.html#consume--) l'événement MouseEvent lorsque Control est arrêté, ainsi JTable n'essaie pas de l'interpréter. Sachez que Ctrl-clic doit basculer la sélection d'une ligne, et non seulement sélectionner unilatéralement la ligne; c'est ainsi que fonctionne chaque look-and-feel que je connais. – VGR

+0

J'ai juste besoin d'avoir plusieurs sélections. Si une ligne est sélectionnée et si Control Click est appuyé sur une autre ligne, les deux lignes doivent être sélectionnées et mises en surbrillance. – Kit

Répondre

-1

Un de mes écouteurs de souris effacait les sélections qui faisaient apparaître que le contrôle + clic ne fonctionnait pas. Merci d'avoir passé en revue mon problème.