salut j'aimerai filtrer un tableau a partir d'une zone de recherche grace a une requete like que je saisie dans un texfield
Version imprimable
salut j'aimerai filtrer un tableau a partir d'une zone de recherche grace a une requete like que je saisie dans un texfield
Salut,
Si tu parles de filtrer une JTable, il faut utiliser un RowFilter, via un TableRowSorter.
Exemple :
Code:
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); } }
Merci pour ton aide
j'ai résolu mon problème ;):)