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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| public class JTableFilterExample {
public static void main(String[] args) throws IOException {
String[] columns = { "Nom", "Nombre" };
Object[][] data = { { "Machin", 10 }, { "Truc", 20 }, { "Bidule", 30 } };
JFrame frame = new JFrame("Démo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel filterpanel = new JPanel(new GridBagLayout());
JTextField filterField = new JTextField();
filterpanel.add(new JLabel("Filtre : "));
filterpanel.add(filterField,
new GridBagConstraints(GridBagConstraints.RELATIVE, GridBagConstraints.RELATIVE,
1, 1, 1d, 0d,
GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL,
new Insets(0,0,0,0),
0, 0)
);
JPanel panel = new JPanel(new BorderLayout());
JTable table = new JTable(data, columns);
panel.add(table.getTableHeader(), BorderLayout.NORTH);
panel.add(new JScrollPane(table));
frame.add(filterpanel,BorderLayout.NORTH);
frame.add(panel);
TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(table.getModel());
table.setRowSorter(rowSorter);
filterField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
update();
}
@Override
public void insertUpdate(DocumentEvent e) {
update();
}
@Override
public void changedUpdate(DocumentEvent e) {
update();
}
private void update() {
String filterValue = filterField.getText().trim();
if (filterValue.isEmpty()) {
rowSorter.setRowFilter(null);
} else {
RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
public boolean include(RowFilter.Entry<? extends Object, ? extends Object> entry) {
String name = (String) entry.getValue(0); // colonne nom
String value = String.valueOf(entry.getValue(1)); // colonne nombre
return startsWithIgnoreCase(name, filterValue)
|| String.valueOf(value).startsWith(filterValue);
}
private boolean startsWithIgnoreCase(String string, String prefix) {
return string.toLowerCase().startsWith(prefix.toLowerCase());
}
};
rowSorter.setRowFilter(filter);
}
}
});
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
} |
Partager