La tâche consiste à permettre aux utilisateurs de sélectionner plusieurs cellules non contiguës dans une JTable, permettant une sélection de cellules plus flexible au-delà des groupes de cellules continues.
1. Utilisation de ListSelectionModel
La méthode setSelectionModel() de JTable vous permet de personnaliser le modèle de sélection. En le définissant sur ListSelectionModel.SINGLE_SELECTION et en ajoutant un écouteur pour gérer InputEvent.CTRL_MASK, vous pouvez implémenter une sélection de cellules non continue.
2. Personnalisation du traitement MouseEvent
En remplaçant la méthode processMouseEvent() dans la JTable, vous pouvez modifier les modificateurs de l'événement pour indiquer que la touche de contrôle est enfoncée. De cette façon, le tableau se comportera comme si l'utilisateur maintenait la touche de contrôle enfoncée, permettant ainsi la sélection de plusieurs cellules.
3. Implémentation d'un modèle de sélection de liste personnalisé
Si les modèles de sélection intégrés ne répondent pas à vos exigences, vous pouvez créer votre propre implémentation ListSelectionModel qui gère la sélection de cellules de la manière souhaitée.
4. Exemple d'implémentation
L'extrait de code suivant fournit un SSCCE qui démontre l'approche personnalisée processMouseEvent() pour autoriser la sélection de cellules non continue dans une JTable :
import java.awt.Component; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import javax.swing.*; public class TableSelection extends JFrame { public TableSelection() { JPanel main = new JPanel(); // Initialize table data String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; Object[][] data = { {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)}, {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)} }; // Override processMouseEvent to add control modifier JTable table = new JTable(data, columnNames) { @Override protected void processMouseEvent(MouseEvent e) { int modifiers = e.getModifiers() | InputEvent.CTRL_MASK; MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(), e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton()); super.processMouseEvent(myME); } }; JScrollPane pane = new JScrollPane(table); main.add(pane); this.add(main); } public static void main(String[] args) { new TableSelection(); } }
Cette implémentation vous permet pour sélectionner des cellules non contiguës en maintenant enfoncée la touche contrôle tout en cliquant sur les cellules souhaitées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!