bonjour,
il y a peut être plus simple (et dans ce cas je suis preneur), mais je suis en train d'utiliser un filtre sur les listes pour filtrer une combobox (ca part mal ?)
voici donc mon filtre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package filters; import java.util.Vector; import database.DataAccess; public class ProcessusListModel { Vector processus; DataAccess dbConnection; public ProcessusListModel(DataAccess _dbConnection){ dbConnection = _dbConnection; processus = dbConnection.getProcess(); } public int getSize() { // return size of static data return processus.size(); } public Object getElementAt(int index) { // return static data element return processus.get(index); } public Vector getProcessus() { return processus; } public void update(){ processus = dbConnection.getProcess(); } }et j'aurais deux questions à ce propos :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
91
92
93
94
95
96
97
98
99
100
101 package filters; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.AbstractListModel; import javax.swing.ListModel; import javax.swing.event.ListDataListener; public class FilterProcessus extends AbstractListModelFilter { //listes des indices "autorisés" protected ArrayList indexList = new ArrayList(); // Current State protected String filter; public FilterProcessus(ListModel model) { super(delegate); } public synchronized void setProcessus(String filterString) { filter = filterString; indexList.clear(); Pattern pattern; Matcher matcher; pattern = Pattern.compile(filter); for(int i =0; i < delegate.getSize();i++) { matcher = pattern.matcher((CharSequence) delegate.getElementAt(i)); if(matcher.find()) { indexList.add(new Integer(i)); } } this.fireContentsChanged(this, 0, indexList.size()); } public int getSize() { // Return size of index collection. If no filter // has been set, or the filter refers to a salesman // that does not exist, zero may be returned return indexList.size(); } public Object getElementAt(int index) { // return the filtered data element int newIndex = ((Integer) indexList.get(index)).intValue(); System.out.println(newIndex); return delegate.getElementAt(newIndex); } } abstract class AbstractListModelFilter extends AbstractListModel { // Storage of reference to model being filtered protected static ListModel delegate; // Constructor - takes a single parameter containing // a reference to the model being filtered public AbstractListModelFilter(ListModel delegate) { this.delegate = delegate; } public ListModel getDelegate() { return this.delegate; } public int getSize() { // delegate to filter target return delegate.getSize(); } public Object getElementAt(int index) { // delegate to filter target System.out.println("list"); return delegate.getElementAt(index); } public void addListDataListener(ListDataListener listener) { // delegate to filter target delegate.addListDataListener(listener); } public void removeListDataListener(ListDataListener listener) { // delegate to filter target delegate.removeListDataListener(listener); } }
1) est ce la bonne méthode pour filtrer mon combo ?
2) comment je l'utilise ?(le set model attend bien sur un comboboxmodel, et pas un listmodel)
Partager