Recherche dynamique dans un JTable
JTable est un composant Swing flexible, est une sous-classe de la classe JComponent et elle peut être utilisée pour créer une table avec des informations affichées dans plusieurs lignes et colonnes. Nous pouvons rechercher des mots dynamiquement dans un JTable en utilisant RowFilter pour filtrer les résultats de la recherche. Voici un exemple utilisant RowFilter et DocumentListener. Lorsque l’utilisateur tape, les lignes sont filtrées dynamiquement.
Si vous ne souhaiter pas le filtrage dynamique, vous pouvez simplement vous utiliser un bouton, ou vous pouvez ajouter un ActionListener au JTextField, donc lorsque vous appuyez sur Entrée, le filtre sera traité.

Exemple:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class SearchInJtable extends JPanel
{
//Header de JTable
String[] columns = new String[] {
"Id",
"Nom",
"Adresse",
"Taux horaire",
"A temps partiel"
};
//données pour JTable dans un tableau 2D
Object[][] data = new Object[][] {
{1, "Thomas", "74 rue des Chaligny", 20.0, true },
{2, "Jean", "124 rue du Président Roosevelt", 50.0, false },
{3, "Yohan", "50 Place Charles de Gaulle", 30.0, true },
{4, "Emily", "57 place de Miremont", 60.0, false },
{5, "Alex", "98 rue Pierre De Coubertin", 10.0, false },
};
//crée un JTable avec des données
JTable table = new JTable(data, columns);
TableRowSorter<TableModel> sort = new TableRowSorter<>(table.getModel());
JTextField textField = new JTextField();
public SearchInJtable()
{
//définir la largeur de la 3éme colonne sur 200 pixels
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(2).setPreferredWidth(200);
table.setRowSorter(sort);
JPanel p = new JPanel(new BorderLayout());
p.add(new JLabel("Chercher un mot:"), BorderLayout.WEST);
p.add(textField, BorderLayout.CENTER);
setLayout(new BorderLayout());
add(p, BorderLayout.SOUTH);
add(new JScrollPane(table), BorderLayout.CENTER);
textField.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void insertUpdate(DocumentEvent e) {
String str = textField.getText();
if (str.trim().length() == 0) {
sort.setRowFilter(null);
} else {
//(?i) recherche insensible à la casse
sort.setRowFilter(RowFilter.regexFilter("(?i)" + str));
}
}
@Override
public void removeUpdate(DocumentEvent e) {
String str = textField.getText();
if (str.trim().length() == 0) {
sort.setRowFilter(null);
} else {
sort.setRowFilter(RowFilter.regexFilter("(?i)" + str));
}
}
@Override
public void changedUpdate(DocumentEvent e) {}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
JFrame f = new JFrame("Chercher dans JTable");
f.add(new SearchInJtable());
f.setSize(500, 180);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
Sortie:


