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();
	    }
}
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);
	}
}
et j'aurais deux questions à ce propos :
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)