Détection de simple clic ou de double clic sur JTable – Java
JTable est un composant Swing flexible qui est très bien adapté pour afficher des données dans un format tabulaire. Dans ce tutoriel, nous allons découvrir comment détecter le simple clic ou le double clic sur JTable en Java.
Chaque fois qu’une sélection est effectuée, ListSelectionEvent est déclenché. La méthode valueChanged() dans l’interface ListSelectionListener est appelée chaque fois qu’une nouvelle sélection a été effectuée.
Exemple:
import javax.swing.*; import java.awt.*; import javax.swing.table.*; import javax.swing.event.*; import java.awt.event.*; public class ClickJTable implements ListSelectionListener { JTable table; public ClickJTable() { JFrame f = new JFrame("Clic sur JTable"); //En-têtes pour JTable String[] columns = new String[] { "Id", "Nom", "Adresse", "Taux horaire" }; //données pour JTable dans un tableau 2D Object[][] data = new Object[][] { {1, "Thomas", "Paris", 20.0 }, {2, "Jean", "Marseille", 50.0 }, {3, "Yohan", "Lyon", 30.0 }, {4, "Emily", "Toulouse", 60.0 }, {5, "Alex", "Nice", 10.0 }, }; //définir le TableModel pour récupérer les données de JTable TableModel model = new AbstractTableModel() { public int getColumnCount() { return columns.length; } public int getRowCount() { return data.length; } public Object getValueAt(int row, int col) { return data[row][col]; } public String getColumnName(int column) { return columns[column]; } public Class getColumnClass(int col) { return getValueAt(0,col).getClass(); } public void setValueAt(Object aValue, int row, int column) { data[row][column] = aValue; } }; table = new JTable(model); ListSelectionModel listModel = table.getSelectionModel(); listModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); listModel.addListSelectionListener(this); JScrollPane scroll = new JScrollPane(table); scroll.setPreferredSize(new Dimension(300, 300)); f.getContentPane().add(scroll); f.setSize(400, 180); f.setVisible(true); } public void valueChanged(ListSelectionEvent e) { int[] sel; Object value; if (!e.getValueIsAdjusting()) { sel = table.getSelectedRows(); if (sel.length > 0) { for (int i=0; i < 4; i++) { // récupérer les données de la table TableModel tm = table.getModel(); value = tm.getValueAt(sel[0],i); System.out.print(value + " "); } System.out.println(); } } } public static void main(String[] args) { new ClickJTable(); } }
Sortie: