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!