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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| import java.util.Arrays;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class FiltreTriModel extends AbstractTableModel implements TableModel{
private static final long serialVersionUID = -2757129423131249207L;
private TableModel model;
private int colonneTri;
private Ligne[] lignes;
/**
* This customized abstract table model sort the attached table.
* @param m : base table model.
*/
public FiltreTriModel(TableModel m)
{
super();
model = m;
lignes = new Ligne[model.getRowCount()];
for (int i = 0; i < lignes.length; i++)
{
lignes[i] = new Ligne();
lignes[i].index = i;
}
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
if (columnIndex == 2)
return true;
else
return false;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
Object[][]data = ((GadgetsTableModel)model).getDatas();
data[rowIndex][columnIndex] = aValue;
fireTableDataChanged();
}
public void sort(int c)
{
colonneTri = c;
Arrays.sort(lignes);
fireTableDataChanged();
}
public Object getValueAt(int r, int c)
{
return model.getValueAt(lignes[r].index, c);
}
public int getRowCount()
{
return model.getRowCount();
}
public int getColumnCount()
{
return model.getColumnCount();
}
public String getColumnName(int c)
{
return model.getColumnName(c);
}
public Class<?> getColumnClass(int c)
{
//return (c == 1 || c == 2) ? Number.class : Object.class;
return model.getColumnClass(c);
}
public void addEcouteur(final JTable table)
{
table.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(java.awt.event.MouseEvent event)
{
if (event.getClickCount() < 1)
return;
int tableColumn = table.columnAtPoint(event.getPoint());
int modelColumn = table.convertColumnIndexToModel(tableColumn);
sort(modelColumn);
}
});
}
@SuppressWarnings("unchecked")
private class Ligne implements Comparable {
public int index;
public int compareTo(Object autre)
{
Ligne autreLigne = (Ligne)autre;
Object cellule = model.getValueAt(index, colonneTri);
Object autreCellule = model.getValueAt(autreLigne.index, colonneTri);
return ((Comparable)cellule).compareTo(autreCellule );
}
}
} |
Partager