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] insérer des données...


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut [JTable] insérer des données...
    Bonjour,

    Je crois avoir compris qu'en SWING, les différents composants travaillent selon des modèles. J'ai donc créer un modèles pour l'application que je suis en train de réaliser pour mon tableau.

    Dans tous les exemples que j'ai trouvé, les données sont passées au tableau avant que celui-ci ne soit construit. J'ai aussi trouver des docs pour modifier une valeur directement dans le tableau.

    Imaginons que je reçoive les informations que je veux afficher dans mon tableau au compte goutte... Comment faire pour ajouter ces données au modèle et qu'il les affiche???

    Merci d'avance...

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Je ne sais pas si j'ai très bien compris ta question, mais tu a une fonction setValueAt(object,int,int)

    dans laquelle tu donne l'objet a ajouter, son num de ligne et son num de col

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    oui tout à fait

    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
     
    package mypackageMail;
     
    import java.util.Vector;
    import javax.mail.Message;
    import javax.swing.table.AbstractTableModel;
     
    public class TableModelMail extends AbstractTableModel
    {
      Object[][] data;                                  
      String[] columnNames;
     
      public TableModelMail(Object[][] data, String[] columnames)
      {
        this.data = data;
        this.columnNames = columnames;
      }
     
      public String getColumnName(int columnIndex) 
      {
        return columnNames[columnIndex].toString();  
      }
     
      public int getRowCount() 
      {
        return data.length;    
      }
     
      public int getColumnCount() 
      {
        return columnNames.length;  
      }
     
      public Object getValueAt(int rowIndex, int columnIndex) 
      {
        return data[rowIndex][columnIndex];
      }
     
      public boolean isCellEditable(int rowIndex, int columnIndex) 
      {
        return false;
      }
     
      public void setValueAt(Object myValue, int rowIndex, int columnIndex) 
      {
        data[rowIndex][columnIndex] = myValue;
        fireTableCellUpdated(rowIndex,columnIndex);
      }
    }
    Mais qd je fais un setValueAt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(int i=0; i<msg.length; i++)        
    {
              myModel.setValueAt(msg[i].getFrom()[0],i,0);
              myModel.setValueAt(msg[i].getSubject(),i,1);
              myModel.setValueAt(msg[i].getReceivedDate(),i,2);
    }
    bein rien ne se passe dans mon tableau...

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: [SWING] JTABLE --> insérer des données...
    Salut,

    Attention : setValue() sert à modifier une cellule mais pas à en créer...

    Citation Envoyé par gondek
    Imaginons que je reçoive les informations que je veux afficher dans mon tableau au compte goutte... Comment faire pour ajouter ces données au modèle et qu'il les affiche???
    Il faut écrire ton propre TableModel de manière à ce qu'il utilise une List pour stocker les différents éléments. Chaque élément de la liste correspond à une ligne de ta JTable, et les propriétés de l'objet correspondent aux différentes colonnes...

    Il suffit ensuite de créer dans ce modèle une méthode add() qui te permet d'ajouter des éléments dans la liste tout en renseignant les différents listener (important pour que la JTable soit actualisé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void add (MyObject row) {
    	this.list.add(row);
    	int index = this.list.size() - 1;
    	fireTableRowsInserted(index, index);
    }
    La méthode fireTableRowsInserted() hérité d'AbstractTableModel renvoit l'événement à tous les objet enregistré. (si tu ne souhaites pas hérité d'AbstractTableModel il te suffit de créer ces méthodes... ce n'est pas bien compliqué et au pire tu regardes le code source )

    Bien sûr il faut que toutes les autres méthodes de TableModel prennent en compte cette List...

    a++

    PS : gondek, tu as dû désactiver le BBCode dans ton profil...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    J'hérite bien de AbstractTableModel.

    J'ai à présent une méthode pour ajouter une ligne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public void addRow(String DE, String SUBJECT, String RECVDATE)
      {
        System.out.println(DE +" "+ SUBJECT +" "+ RECVDATE);
        data[data.length][0] = DE;    
        data[data.length][1] = SUBJECT;
        data[data.length][2] = RECVDATE;
        fireTableRowsInserted(data.length-1,data.length-1);
      }
    mais apparemment il y a un problème... pourtant g bien un listener...

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gondek
    mais apparemment il y a un problème...
    Ce serait bien d'indiquer le problème exact... même si je pense que ce doit être une ArrayIndexOutOfBoundException...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public void addRow(String DE, String SUBJECT, String RECVDATE)
      {
        System.out.println(DE +" "+ SUBJECT +" "+ RECVDATE);
        data[data.length][0] = DE;    
        data[data.length][1] = SUBJECT;
        data[data.length][2] = RECVDATE;
        fireTableRowsInserted(data.length-1,data.length-1);
      }
    Les tableaux java ne peuvent pas être redimensionné... et un tableau de data.length éléments accepte les index de 0 à data.length-1 !!!!

    Donc tu "écris" en dehors de la zone alloué --> ERREUR !
    Il faut que tu crées un nouveau tableau plus grand et que tu copies toutes les références...

    Heureusement il existe l'API de Collection qui simplifie tout cela avec l'interface List et son principale implémentation ArrayList qui permet d'ajouter/supprimer/manipuler des listes d'éléments simplement...

    Cf la FAQ : Structures de données -Tableaux et collections

    a++

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Ok merci pour l'info...
    Je creuse dans ce sens là...

    Malheureusement ma visite chez le dentiste ne peut attendre, ce sera donc pour ce soir...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Bon voilà, j'ai fini par le faire avec un Vector...
    Tout se passe dans le meilleur des mondes, sauf que qd j'ajoute plusieurs lignes avec la méthode public void addRow(String[] newRow)
    --> le résultat c'est que g plusieurs lignes toutes identiques à la dernière ligne ajoutée!!!!!

    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
     
    package mypackageMail;
     
    import java.util.Enumeration;
    import java.util.Vector;
    import javax.mail.Message;
    import javax.swing.table.AbstractTableModel;
     
    public class TableModelMail extends AbstractTableModel
    {
      Vector myVector = new Vector();
      String[] columnNames;
      final static int NbreElementParLigne = 3;
     
      public TableModelMail(Vector myVector, String[] columnames)
      {
        this.myVector = myVector;
        this.columnNames = columnames;
      }
     
      public String getColumnName(int columnIndex) 
      {
        return columnNames[columnIndex].toString();  
      }
     
      public int getRowCount() 
      {
        return myVector.size();    
      }
     
      public int getColumnCount() 
      {
        return columnNames.length;  
      }
     
      public Object getValueAt(int rowIndex, int columnIndex) 
      {
        return ((String[])myVector.elementAt(rowIndex))[columnIndex];
      }
     
      public boolean isCellEditable(int rowIndex, int columnIndex) 
      {
        return false;
      }
     
      public void setValueAt(Object myValue, int rowIndex, int columnIndex) 
      {
        int index = (rowIndex*NbreElementParLigne)+columnIndex-1;
        System.out.println(index);
        myVector.set(index,myValue);
        fireTableCellUpdated(rowIndex,columnIndex);
      }
     
      public void addRow(String[] newRow)
      {
        myVector.addElement(newRow);
        Enumeration e;
     
        for (e=myVector.elements(); e.hasMoreElements();)
        {
         String[] temp = (String[])e.nextElement();
         System.out.println(temp[0] + " " + temp[1]+ " "+ temp[2]);
        }
     
        fireTableRowsInserted(getRowCount(),getRowCount());
      }
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2004
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Le problème se situait au niveau de l'appel de la fonction!!!
    Merci à tous...

    c résolu

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gondek
    c résolu
    Dans ce cas pense à utiliser le bouton (en bas à gauche de la page)

    a++

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

Discussions similaires

  1. Insérer des données de Jtable dans une table
    Par mimati dans le forum Général Java
    Réponses: 0
    Dernier message: 15/11/2013, 18h18
  2. Insérer des données cryptées MD5
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/08/2005, 18h08
  3. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11
  4. [JTable] Insérer des données?
    Par waldo2188 dans le forum Composants
    Réponses: 4
    Dernier message: 29/03/2005, 11h40
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37

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