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 :

Mettre à jour le contenu d'une JTABLE


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut Mettre à jour le contenu d'une JTABLE
    Bonjour,
    Dans un système de pagination, j'essaie de mettre dynamiquement à jour le contenu d'une JTable en fonction des lignes ramenées pour chaque page. Le code suivant semble insuffisant dans la mesure ou la JTable continue d'afficher les anciennes lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    model.setDataVector(data,colnames);
    table.setModel(model);
    Aurais-je oublié quelque chose ?
    D'avance merci.

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Même en ajoutant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    model.fireTableDataChanged() ;
    table.revalidate();
    il n'y a aucun changement visuel.
    Je ne pensais pas que quelque chose de si simple puisse être si compliqué.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Est-ce que si tu redimensionnes ton table (Forcer le repaint) les bonnes données apparaissent ?
    Si ça ne change rien c'est peut-être ton model qui n'est pas bon.

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Voici le modèle:
    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
     
     /*---------------------------------------
      *  TableModel class to allow updates
      *--------------------------------------*/
     class MyTableModel extends AbstractTableModel {
     
     
            private String[] columnNames = {" "};
            private Object[][] datas = {{" "," "}};
     
            public MyTableModel()
            {
              super();
            }
     
            public MyTableModel(Object[][] dataVector,Object[] columnIdentifiers)
            {
                super();
                columnNames = (String[])columnIdentifiers ;
                datas = dataVector;
            }
     
            public int getColumnCount() {
                return columnNames.length;
            }
     
            public int getRowCount() {
                if (datas != null) return datas.length;
                else return 0;
            }
     
            public String getColumnName(int col) {
                return columnNames[col];
            }
     
            public Object getValueAt(int row, int col) {
                return datas[row][col];
            }
     
            public void setDataVector(Object[][] dataVector,
                              Object[] columnIdentifiers) {
                columnNames = (String[])columnIdentifiers ;
                datas = dataVector;
            }
     
            public Class getColumnClass(int c) {
                Object o = getValueAt(0, c);
                if(o == null) {
                    if("INTEGER".equalsIgnoreCase(coltypes[c])) return Integer.class;
                    else if("DATE".equalsIgnoreCase(coltypes[c])) return Date.class;
                    else return Double.class;
                }
                return o.getClass();
            }
     
            public boolean isCellEditable(int row, int col) {
                CellProp cp = (CellProp)hCellProps.get(colnames[col]);
                if (!bUpdatable) {
                    return false;
                } else {
                    return true;
                }
            }
     
            public void setValueAt(Object value, int row, int col) {
                datas[row][col] = value;
                iRowsChanged[row] = 1 ;
                SendMessage(DrawLAF.TBTABLE_CHANGE, ""+(row+1)+","+(col+1));
            }
     
            private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();
     
                for (int i=0; i < numRows; i++) {
                    log("    row " + i + ":");
                    for (int j=0; j < numCols; j++) {
                        log("  " + data[i][j]);
                    }
                    log("");
                }
                log("--------------------------");
            }
     
        }

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Je pense qu'il faut que ton modèle émette des events quand tu le modifie via les méthodes fireXXXEvent :

    - setDataVector
    - setValueAt

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Merci.

    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableDataChanged();
    dans setDataVector() et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableCellUpdated(row, col);
    dans setValueAt()
    mais cela ne change toujours rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre à jour un bouton dans une JTable
    Par peofofo dans le forum Composants
    Réponses: 2
    Dernier message: 06/01/2012, 21h51
  2. Mettre à jour le contenu d'une jscrollpane.
    Par Decon dans le forum Général Java
    Réponses: 1
    Dernier message: 25/05/2010, 02h58
  3. Réponses: 1
    Dernier message: 07/05/2010, 14h36
  4. Mettre à jour le contenu d'une box
    Par Rizen dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 03/01/2010, 23h19
  5. Réponses: 14
    Dernier message: 15/01/2009, 09h54

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