Maison > Java > javaDidacticiel > le corps du texte

Comment autoriser la sélection de cellules non continue dans une JTable ?

Mary-Kate Olsen
Libérer: 2024-11-23 08:26:36
original
660 Les gens l'ont consulté

How to Allow Non-Continuous Cell Selection in a JTable?

Autoriser la sélection de cellules JTable individuelles et non continues

Comprendre l'exigence

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.

Exploration Solutions

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();
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal