"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment activer la sélection de cellules non continue dans JTable ?

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

Publié le 2024-11-16
Parcourir:825

How to Enable Non-Continuous Cell Selection in JTable?

Sélection de cellules non continues dans JTable

Dans JTable, le mode de sélection par défaut autorise uniquement la sélection de cellules contiguës. Pour permettre une sélection de cellules individuelles et non continues, les approches suivantes peuvent être envisagées :

1. CTRL MOUSE_CLICK :

Si setSelectionMode(ListSelectionModel.SINGLE_SELECTION) n'est pas défini, maintenir la touche CTRL enfoncée tout en cliquant sur les cellules permet une sélection de cellules non continues.

2. ListSelectionModel modifié :

Comme ListSelectionModel est partagé par JTable et JList, le ListSelectionModel modifié suivant peut être utilisé :

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class NonContSelectionModel extends DefaultListSelectionModel {

    @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);
    }
}

Ce modèle peut être appliqué à JTable en utilisant setSelectionModel(new NonContSelectionModel()).

Démonstration :

L'extrait de code suivant crée un JTable qui permet une sélection de cellules non continue à l'aide du ListSelectionModel modifié :

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class NonContJTableSelection {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                String[] columnNames = {"Name", "Age", "Profession"};
                Object[][] data = {
                        {"John Doe", 30, "Software Engineer"},
                        {"Jane Doe", 28, "Doctor"},
                        {"Peter Jones", 45, "Lawyer"}
                };
                JTable table = new JTable(data, columnNames);
                table.setSelectionModel(new NonContSelectionModel());
                JScrollPane scrollPane = new JScrollPane(table);
                panel.add(scrollPane);

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3