[JTable] Sortir du mode "edition"
Bonjour à tous,
Voila j'ai une Jtable que je remplie avec mon tableModel :
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 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:
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