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 :

Actualiser l'affichage jtable


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Par défaut Actualiser l'affichage jtable
    j ai un problème assez complexe, je vai essayer de l'expliquer clairement:

    J ai jtable qui utilise un model deriver de DefaultTableModel dont voici la classe :

    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
    public class MyModel extends DefaultTableModel{
           private static final long serialVersionUID = 8083956857937064934L;
     
            public int getColumnCount() {
                return 8;
            }
     
            public int getRowCount() {
                return 50;
            }
     
            public boolean isCellEditable(int row, int column) {
                // Aucune cellule éditable
                return false;
            }     
    }
    Ce model est rempli dans ma classe principal : CApplication , voici la methode :

    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
    public void supervision()
    {
        int taillesp=listsuperviser.size();
        int col=0,nberreur=0; String nom=null;
     
        for(int a=0;a<taillesp;a++) //chargement sur le tableau de la liste des postes supervis�s
         {
             col=0;
             element =(CControle_agent_snmp)listsuperviser.get(a); //recuperation d'un objet de la liste superviser
             if(element.lire_etat()!=-1) // mise a jour des informations de l'objet
             {
                 model.setValueAt(element.getNom_poste(),a,col++); // Ajout des informations dans le tableau
                 model.setValueAt(Float.toString(element.getTension_entree()),a,col++);
                 model.setValueAt(Float.toString(element.getTension_sortie()),a,col++);
                 model.setValueAt(Float.toString(element.getNiveau_charge()),a,col++);
                 model.setValueAt("non gerer",a,col++);
     
     
     
                 detecter_evt(element);
                 // methode de detection des erreurs     
     
                 if(element.getMode()==1)
                     nom="batterie";
                else
                    nom="Secteur";
                 model.setValueAt(nom,a,col++);
     
     
                 if(element.getEtat()==1)
                {
                     model.setValueAt("Actif",a,col++);
                    model.setValueAt(Color.green,a,col);
                }
                else
                {
                     model.setValueAt("Erreur",a,col++);
                    model.setValueAt(Color.red,a,col);
                }
                    element=null;          // mise a null de l'element pour suppresion par le Garbage Collector
             }
             else 
             {     
                 col=0;                 // Affichage en cas de postes non joignable
                 nberreur++;
                 model.setValueAt(element.getNom_poste(),a,col++);
                 model.setValueAt("INCONNU",a,col++);
                 model.setValueAt("INCONNU",a,col++);
                 model.setValueAt("INCONNU",a,col++);
                 model.setValueAt("INCONNU",a,col++);
                 model.setValueAt("Erreur",a,col++);
                 model.setValueAt("INACTIF",a,col++);
                 model.setValueAt(Color.blue,a,col);
             }}
            if(nberreur==taillesp) // arret de la supervision si aucun des postes n'est atteignable
                {
                    minuteur.stop();                  // arret minuteur
                    MIdesactive.setSelected(true);  
        }    
            historique.enregistrer_defo_fichier(); // enregistrement de la liste chain�e dans le fichier
            element=null;  // mise a null de l'element pour suppresion par le Garbage Collector
    }
    Cette méthode est appellé toutes les 5 secondes par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            // Creation et Initialisation du Timer 
             ActionListener taskPerformer = new ActionListener() {
                  public void actionPerformed(ActionEvent evt) {
                     supervision();
                  }
              };
            minuteur = new Timer(5000, taskPerformer); //Parametre : le delay et la tache
    J ai un probleme de raffraichissement ou de timer. Actuellement ca raffraichi toutes les 5 secondes a la fin de la fonction, je souhaiterai savoir si c'est possible de raffraichir le tableau a chaque nouelle ligne ajouter

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    essaye de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableDataChanged()
    pour indiquer à ta table que les données ont changé...

  3. #3
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    a prioris si ton model est bien associé a ta table, dès que tu ajoutes une ligne dans le model tu devrais avoir la table (vue) qui se met à jour automatiquement ...

  4. #4
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    oula tu as raison , mais je ne crois pas que ce soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableDataChanged()
    car la structure (nombre de colonnes etc) n'a pas changé , mais plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableRowsInserted(0,n);  // ou n est le nombre de lignes dans ta table

  5. #5
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Citation Envoyé par biozaxx
    oula tu as raison , mais je ne crois pas que ce soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableDataChanged()
    car la structure (nombre de colonnes etc) n'a pas changé , mais plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableRowsInserted(0,n);  // ou n est le nombre de lignes dans ta table

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    je pense que le résultat est le même que l'on utilise ta mèthode ou la mienne..

    Pour info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       public void fireTableDataChanged() {
            fireTableChanged(new TableModelEvent(this));
        }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public void fireTableRowsInserted(int firstRow, int lastRow) {
            fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
                                 TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
        }

  7. #7
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    alors en fait j'ai deja eu des truc bizarre (plusieurs fois dans des prog differents) en utilisant fireTableDataChanged() apres avoir simplement ajouté des données a mon model (quand la table etait deja construite et affichée)
    il me semble que l'affichage partait en vrac, du style les colonnes devenaient fixes et ne prenaient pas toute la largeur disponible dans la table.

    et j'avais résolu le problème en utilisant fireTableRowsInserted. c'est peut etre pas lié mais a chaque fois cela à resolu le probleme

    voila pour la petite histoire

    @+

Discussions similaires

  1. Actualiser l'affichage d'un JTABLE
    Par arnaud036 dans le forum Composants
    Réponses: 2
    Dernier message: 05/09/2007, 09h29
  2. Problème d'actualisation d'une JTable
    Par feasil dans le forum Composants
    Réponses: 4
    Dernier message: 23/03/2007, 10h39
  3. Actualiser l'affichage d'une applet
    Par carlosml dans le forum Applets
    Réponses: 1
    Dernier message: 21/08/2006, 09h35
  4. Actualiser l'affichage de boutons
    Par pouillou dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 07/05/2006, 18h09
  5. Réponses: 7
    Dernier message: 24/01/2006, 15h34

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