1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| package swing.table;
import java.awt.BorderLayout;
import java.util.regex.Pattern;
import javax.swing.DefaultRowSorter;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
public class TableFiltering {
private JTextField filterTextField;
private JTable filteredTable;
private JFrame f;
public TableFiltering() {
String[] cols = { "A", "B", "C", "D" };
String[][] data = { { "Toto", "Machin", "bidule", "Truc" },
{ "abc", "def", "ghi", "jkl" } };
filteredTable = new JTable(data, cols);
filteredTable.setAutoCreateRowSorter(true);
filterTextField = new JTextField();
filterTextField.getDocument().addDocumentListener(
new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
applyTableFilter(filterTextField.getText());
}
@Override
public void insertUpdate(DocumentEvent e) {
applyTableFilter(filterTextField.getText());
}
@Override
public void changedUpdate(DocumentEvent e) {
applyTableFilter(filterTextField.getText());
}
});
f = new JFrame();
f.add(new JScrollPane(filteredTable));
f.add(filterTextField, BorderLayout.SOUTH);
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private void applyTableFilter(String filterText) {
// On escape le texte afin que son contenu ne soit pas considéré comme
// une regexp
String escapedFilterText = Pattern.quote(filterText);
// On ajoute les wildcards a gauche et a droite
String completeFilterText = ".*" + escapedFilterText + ".*";
// On applique le filtre a la JTable
((DefaultRowSorter) filteredTable.getRowSorter())
.setRowFilter(RowFilter.regexFilter(completeFilterText));
}
public static void main(String[] args) {
new TableFiltering();
}
} |
Partager