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] ajouter une ligne


Sujet :

Composants Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut [JTABLE] ajouter une ligne
    Voila j'ai des chercher parmis les topic qu'il y avais sur le forum et donc j'ai remarquer que pour faire une jtable il fallais faire un nouveau TableModel.

    J'ai donc fais ce la

    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
    class MonTableModel extends AbstractTableModel {
            public MonTableModel(ArrayList tableau) {
                    this.data = tableau;
            }
     
            public int getRowCount() {
                try{
                    return this.data.size(); 
                }
                catch(Exception e){
                    return 0;
                }
            }
     
            public int getColumnCount() {
                    return 3;
            }
     
            public void modifiertableau(ArrayList tableau) {
                    this.data = tableau;
            }
     
            public Object getValueAt(int r, int c) {
                    return this.data.get(r);
            }
     
            private ArrayList data = new ArrayList();
    }
    Je l'utililse apres en faisant ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     ArrayList al = new ArrayList();
    MonTableModel mtm = new MonTableModel(al); //dans ma partie d initialisation
    ....
    al.add(obj) // les valeurs ici sont correct pas de probleme
    this.mtm.modifiertableau(al);
    this.jTable1.setModel(mtm);
    Alors j'ai bien une ligne qui s ajoute mais dedans apparait dans chaque celliule
    [Ljava.lang.string;@1950
    (le chiffre change a chaque fois)

    Voila donc ca doit encore etre tout bete mais la je vois pas.

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Il t'affiche la référence de ton Objet... Ca veut dire que la méthode toString de ton objet n'est pas bien définie, ou alors, il faut lui passer un String...

    Ensuite, c'est pas vraiment optimal de faire comme tu le fais, ca ne sert à rien d'employer modifierTableau puisque tableau étant passé par référence, si tu modifies d'un coté ca change de l'autre.

    Mais surtout, tu pers l'utilité d'un modèle, qui est de séparer la vue des données.... Il faut créer une méthode add dans le modéle, qui va se charger de mettre à jour le modèle.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    je me doutais bien que c'etait qlqchose du genre le truc, c'est quoi que je dois changer :s

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Dokho1000
    je me doutais bien que c'etait qlqchose du genre le truc, c'est quoi que je dois changer :s
    Déja, il faudrait savoir ce que tu ajoutes à l'arrayList dans ce code-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    al.add(obj) // les valeurs ici sont correct pas de probleme
    c'est quoi obj ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    c'est betement un tableau a 3 case de string.

    donc String [] obj = new String[3]

    EDIT : Putain je suis con, je peux pas passé un tableau la :s
    Je savais que ca allais etre con mais a ce point la.

    La c gros boulay que je suis.
    Merci quand meme c'est pcq tu m as dis je passe quoi que ca a fais tilt
    Par contre comme je fais alors pour affecter les 2 autres champs de la row

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Dokho1000
    c'est betement un tableau a 3 case de string.

    donc String [] obj = new String[3]

    EDIT : Putain je suis con, je peux pas passé un tableau la :s
    Je savais que ca allais etre con mais a ce point la.

    La c gros boulay que je suis.
    Merci quand meme c'est pcq tu m as dis je passe quoi que ca a fais tilt
    Par contre comme je fais alors pour affecter les 2 autres champs de la row
    Ce que tu peut faire, c'est parcourir ton tableau et ajouter chaque String à ton ArrayList ou alors employer un tableau dans ton modèle, mais dans ce cas, tu perdras la possibilité d'ajouter des lignes de manière simple...

    P.S. Si tu pouvais faire quelques efforts pour l'orthographe, ce ne serait pas de refus...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    hum en fait je comprend pas comment on fais pour dire dans la class de mon model que je veux que tel valeur aille dans la column 1 ou 2 ou 3.
    ici j'ai les meme valeur dans chaque column

    je sais pas si j'ai ete clair...

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Dokho1000
    hum en fait je comprend pas comment on fais pour dire dans la class de mon model que je veux que tel valeur aille dans la column 1 ou 2 ou 3.
    ici j'ai les meme valeur dans chaque column

    je sais pas si j'ai ete clair...
    Ben, en fait, il te faut soit un tableau à deux dimensions soit une ArrayList d'arrayList, la première dimension étant les colonnes et la deuxième les lignes.

    Ca te donnerait quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    private Object[][] data = null;
    ...
    public void setData(Object[][] new Data){
    this.data = newData();
    }
    ...
    public Object getValueAt(int col, int row){
    return data[column][row];
    }
    ...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    j'ai essayé mais ca ne marche pas. la je n'ai plus de ligne du tout.

    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
    class MonTableModel extends AbstractTableModel {
            public MonTableModel(Object [][] tableau) {
                    this.data = tableau;
            }
     
            public void setData(Object[][] newData){
                this.data = newData;
            }
     
            public int getRowCount() {
                try{
                    return data[0].length;
                }
                catch(Exception e){
                    return 0;
                }
     
            }
     
            public int getColumnCount() {
                    return 3;
            }
     
            public Object getValueAt(int r, int c) {
                    return this.data[c][r];
            }
     
            private Object[][] data = null;
    }
    pour l'initialisation et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Object [][] al = null;
    MonTableModel mtm = new MonTableModel(al);
    JTable jTable1 = new JTable(mtm);
    ...
    ...
    ...
    Object [][] obj;
    if(this.al == null) { obj = new Object[3][1]; }
    else { obj = new Object[3][this.al[0].length+1]; }
    obj[obj[0].length] = tmp;
    this.al = obj;
    mtm.setData(this.al);
    this.jTable1.setModel(mtm);
    Ca ne fais casi aucun changement appart que j'ai juste un seul champs de rempli au mauvaise endroit

    EDIT : je viens de voir que je me suis tromper dans le obj[obj[0].length] = tmp. les valeurs sont mise a l envers

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Bon ca marche presque bien, donc j'ai bien les elements au bonne endroit.
    Il y a juste un ptit probleme de delai.
    Entre le moment ou je fini d ajouter mes champs via un bete formulaire en cliquant sur un bouton. il y a delai quand meme important avant que la modification n apparaisse ou bien je suis obligé de diminuer la fenetre puis lla restauré.
    J'aimerais faire une sorte de refresh mais je vois pas ou il y en a 1.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    C'etait encoire tout bete, il faut juste faire un repaint

  12. #12
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Dokho1000
    C'etait encoire tout bete, il faut juste faire un repaint
    Même pas besoin, tu peut employer les méthodes fireTableXXX du modèle pour dire à la JTable de se mettre à jour

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Ha, je ne savais pas, disont que le nom de ces methode me disait rien et quand j'ai vu repaint j'ai essayé ca et ca a marché.

    Je testerai ce que tu as mis .

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

Discussions similaires

  1. [JTable] Ajouter une ligne
    Par aitbouhou dans le forum Composants
    Réponses: 1
    Dernier message: 22/07/2008, 16h32
  2. [JTable] Ajouter une ligne dans un table triée
    Par AliJava dans le forum Composants
    Réponses: 12
    Dernier message: 22/12/2007, 15h17
  3. Ajouter une ligne à JTable
    Par ShredLord dans le forum Composants
    Réponses: 1
    Dernier message: 13/11/2007, 22h15
  4. [JTable] ajouter une ligne
    Par maminova77 dans le forum Composants
    Réponses: 6
    Dernier message: 26/03/2006, 19h28
  5. [JTable] ajouter une ligne
    Par rvfranck dans le forum Composants
    Réponses: 3
    Dernier message: 30/03/2005, 14h25

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