Maison >Java >javaDidacticiel >Comment activer la sélection de cellules non continue dans JTable ?

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

DDD
DDDoriginal
2024-11-08 16:41:021013parcourir

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 plusieurs cellules non continues.

2. ListSelectionModel modifié :

Comme ListSelectionModel est partagé à la fois 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 une 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);
            }
        });
    }
}

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!

Déclaration:
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