Bonjour à tous,

Voila j'ai une Jtable que je remplie avec mon tableModel :
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
102
103
104
105
106
107
 
class MonModele extends AbstractTableModel {
            Vector nomColonne=new Vector(); //les noms de colonnes
            Vector<Vector> donnees=new Vector<Vector>(); //les donnees de la table
            Vector elementUn = new Vector();
 
            public MonModele(String taxo,String onglet,String libelle,String Contextref) {
                nomColonne.addElement("Compte");
                nomColonne.addElement("Actif");
                nomColonne.addElement("Opérateur");
                String StrSQL;
                StrSQL ="SELECT COMPTE,ACTIF,SIGNE FROM MAPPING WHERE TAXONOMIE='"+taxo+"' AND GABARIT='"+onglet+"' AND ELEMENTNAME='"+libelle+"'  AND CONTEXTREF='"+Contextref+"'";
                try{
                    Database connect=new Database();
                    connect.OpenDB();
                    ResultSet rs=connect.Execute(StrSQL);
                    //on place le curseur sur le dernier tuple
                    rs.last();
                    //on récupère le numéro de la ligne
                    int nombreLignes = rs.getRow();
                    //on repace le curseur avant la première ligne
                    rs.beforeFirst();
 
                    while (rs.next()){
 
                        elementUn.addElement(rs.getString("COMPTE"));
                        if (rs.getString("ACTIF").equals("Y")){
                            elementUn.addElement(new Boolean(true));
                        }
                        else{
                            elementUn.addElement(new Boolean(false));
                        }
                        if (rs.getString("SIGNE")!=null){
                            if (rs.getString("SIGNE").equals("-")){
                            elementUn.addElement("-");
                            }
                            else{
                                elementUn.addElement("+");
                            }
                        }else{
                            elementUn.addElement("+");
                        }
 
 
                        //elementUn.addElement(" ");
                    }
                }
                catch (Exception E){
                    JOptionPane.showMessageDialog(null, "Impossible de se connecter à cette BD" +
                    "Erreur " + E.getMessage(), "alert", JOptionPane.ERROR_MESSAGE);
                }
            }
 
            public int getColumnCount() {
 
                return nomColonne.size();
 
             }
 
             public int getRowCount() {
              return elementUn.size()/getColumnCount();
             }
 
             public String getColumnName(int columnIndex) {
              String colName="";
              if (columnIndex<=getColumnCount())
               colName=(String)nomColonne.elementAt(columnIndex);
              return colName;
             }
 
             public Class getColumnClass(int column){
                return getValueAt(0, column).getClass();
             }
 
             public boolean isCellEditable(int rowIndex, int columnIndex) {
                if (columnIndex==2){
                    return true;
                }else{
                    return false;
                }
 
             }
 
            public void setValueAt(Object val, int row, int col) {
                JOptionPane.showMessageDialog(null, "rere", "alert", JOptionPane.ERROR_MESSAGE);
			Object[] obj = (Object[]) elementUn.get((row+1)*(col+1));
			obj[col] = val;
                        elementUn.setElementAt(val, (row+1)*(col+1));
                         //fireTableCellUpdated(row, col);
            }
 
             public Object getValueAt(int rowIndex, int columnIndex) {
              return elementUn.elementAt(
                       (rowIndex*getColumnCount())+columnIndex);
             }
 
             public void setColumnName(Vector colNames){
                    //columnNames=new Vector(colNames.length);
                    nomColonne=colNames;
                     fireTableStructureChanged();
            }
 
            public void removeRow(int row) {
                elementUn.removeElementAt(row);
                fireTableRowsDeleted(row, row);
            }
        }
Je laisse le choix à l'utilisateur de modifier le contenu des cellules d'une colonne en particulier via une ComboBox. J'utilise pour cela un cellEditor et un CellRenderer, juste là tout baigne.

Le hic c'est que je n'arrive pas à sortir du mode edition, autrement dit après avoir fait une modif, l'editor ne passe pas la main au renderer, et donc la combobox reste affichée et pas de modification du model...ça doit être tout bête mais un détail m'a échappé:
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
 
 
        public class MyRenderer implements TableCellRenderer {
 
            public MyRenderer() { 
 
            }
            public Component getTableCellRendererComponent(javax.swing.JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
            {
 
                JLabel l=new JLabel(value.toString());
                return l;
            }
 
        }// Fin de la classe
 
 
 
        public class MyEditor extends AbstractCellEditor  implements TableCellEditor { 
            public JComboBox cmb;
            public MyEditor() { 
            }
            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
            {
                cmb=new JComboBox();
                cmb.addItem("+");
                cmb.addItem("-");
                return cmb;
 
            }
             public void removeCellEditorListener(CellEditorListener cel) { }
             public void addCellEditorListener(CellEditorListener cel) {}
             public void cancelCellEditing() {}
             public boolean stopCellEditing() {
                return true;
             }
             public boolean shouldSelectCell(EventObject eo) {
                return true;
              }
             public boolean isCellEditable(EventObject eo) {
                return true;
            } 
 
             public Object getCellEditorValue() {
                return cmb.getSelectedItem();
            }
        }// Fin de la classe
Je cherche depuis ce matin mais sans succés.

Merci d'avance