Bonjour,

encore merci à sinok qui m'a fourni un très bon lien pour les filtres de JList
(j'ai adapté au Jtables pour mon problème)
http://www-128.ibm.com/developerwork...ary/j-filters/

voici mon code qui comporte 1 erreur ( au moins)
(sinon, ca filtre comme je voulais )

- je ne vois plus les headers (je les avais sans le 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
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
import java.util.ArrayList;
 
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
 
 
public class filtre_couleurs  extends AbstractTableModelFilter {
	//listes des indices "autorisés"
	protected ArrayList indexList = new ArrayList();
    // Current State
    protected String state;
 
	public filtre_couleurs(TableModel delegate) {
		super(delegate);
		this.setState("NONE");
	}
 
	 public synchronized void setState(String myState)
	 {
		 state = myState;
		 indexList.clear();
		 //indexList.add(new Integer());
 
		 for(int i =0; i < delegate.getRowCount();i++)
		 {
			 if(delegate.getValueAt(i,0).equals(state)||state.equals("NONE"))
				 indexList.add(new Integer(i));
		 }
		 this.fireTableDataChanged();
	 }
 
	 public int getRowCount() {
		// TODO Auto-generated method stub
		 return indexList.size();
	}
 
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return delegate.getColumnCount();
	}
 
	public Object getValueAt(int arg0, int arg1) {
		// TODO Auto-generated method stub
		int newIndex = ((Integer) indexList.get(arg0)).intValue();
		return delegate.getValueAt(newIndex, arg1);
	}
 
}
abstract class AbstractTableModelFilter extends AbstractTableModel
{
	// Storage of reference to model being filtered
	protected TableModel delegate;
 
	// Constructor - takes a single parameter containing
	// a reference to the model being filtered
	public AbstractTableModelFilter(TableModel delegate)
	{
		this.delegate = delegate;
	}
 
	public TableModel getDelegate()
	{
		return this.delegate;
	}
 
	public Object getValueAt(int index, int index2)
	{
		// delegate to filter target
		return delegate.getValueAt(index, index2);
	}
 
	public void addTableDataListener(TableModelListener listener)
	{
		// delegate to filter target
		delegate.addTableModelListener(listener);
	}
 
	public void removeTableDataListener(TableModelListener listener)
	{
		// delegate to filter target
		delegate.removeTableModelListener(listener);
	}
}
il est appellé dans la fenètre principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
jpHistoProc.setLayout(new GridBagLayout());
 
    	filtre_couleurs mon_filtre = new filtre_couleurs(new MyTableModel());
 
    	//tri de la Jtable
		TableSorter sorter = new TableSorter(mon_filtre);
 
        JTable  table2 = new JTable(sorter);
 
        sorter.setTableHeader(table2.getTableHeader());
( vous avez remarqué, il y a même un truc pour trier... c'est de la Jtable de compet')

la méthode setState est changée grâce à des boutons

merci