[JTable] AbstractTableModel: modifier contenu d'une cellule
Bonjour,
Dans mon projet, j'ai une JTable dont le modèle étend AbstractTableModel.
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
|
class MyTableModelDemo extends javax.swing.table.AbstractTableModel implements TableCellRenderer, TableModelListener
{
private String[] columnNames = {"Nom","Prénom","Age",""};
private ArrayList myList;
private JLabel btnSuppr = new JLabel();
public MyTableModelDemo(ArrayList myList)
{
this.myList = myList;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return myList.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public boolean isCellEditable(int row, int col)
{
return true;
}
public Object getValueAt(int row, int col)
{
CtrlPersonne myPersonne = (CtrlPersonne)myList.get(row);
switch (col)
{
case 0 : return myPersonne.getNom();
case 1 : return myPersonne.getPrenom();
case 2 : return myPersonne.getAge();
default : return null;
}
}
public void setValueAt (Object value, int row, int col)
{
CtrlPersonne myPersonne = (CtrlPersonne)myList.get(row);
switch(col)
{
case 0 : ((CtrlPersonne)myList.get(row)).setNom(value);
case 1 : ((CtrlPersonne)myList.get(row)).setPreom(value);
case 2 : ((CtrlPersonne)myList.get(row)).setAge(value);
fireTableCellUpdated(row,col);
}
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0,c).getClass();
}
public void setMyList (ArrayList myList)
{
this.myList = myList;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
btnSuppr.setIcon(new javax.swing.ImageIcon(getClass().getResource("/delete_16x16.gif")));
return btnSuppr;
} |
Je la charge à partir de ma BD, tout va bien jusque là puisque toutes les données s'affichent dans ma JTable.
Je voudrais pouvoir modifier le contenu d'une cellule, mais quand je le fais la cellule éditée ne prend pas en compte
la nouvelle valeur entrée au clavier et remet l'ancien contenu.
Avec un DefaultTableModel j'y arrive avec le setValueAt mais avec AbstractTableModel ça fonctionne pas.
Merci d'avance pour votre aide.