[filtrage] Jtable, header disparu
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 (:mouarf: au moins)
(sinon, ca filtre comme je voulais ;) )
- je ne vois plus les headers (je les avais sans le filtre)
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
| 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:
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