IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTable] Sortir du mode "edition"


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut [JTable] Sortir du mode "edition"
    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

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    Je trouve que l'implémentation d'un TableCellEditor est une exercice casse-gueule... tu pourrais pas utiliser la classe DefaultCellEditor pour simplifier?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Salut,

    Ok je suis en train de regarder cela, je reposte dans quelques instants

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    pfffff

    J'y comprend plus rien...Voila ce que j'ai fait mais pas de changement. J'ai donc remplacé le CellEditor par un DefaultCellEditor
    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
     
           public class MyEditor extends DefaultCellEditor{
     
        public MyEditor(JComboBox cmb){
            super (cmb);
     
        }
     
       public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {            
                   return super.getTableCellEditorComponent(table, value, isSelected, row, column);   
        }   
       public boolean stopCellEditing() {
                    return true;
                 }  
    }

  5. #5
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    pourquoi avoir surchargé stopCellEditing() ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Sinon je ne pouvais pas selectionner d'autres cellules, autrement dit dès que je cliquais sur une cellule pour la modifier je ne pouvais pas cliquer sur la cellule du dessous par exemple pour y changer le contenu.
    Si tu as un exemple de code sous la main, je suis preneur .

    Merci

Discussions similaires

  1. [MySQL] Recherche FULL TEXT IN BOOLEAN MODE et les Quotes
    Par GarGamel55 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/01/2006, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo