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

JDBC Java Discussion :

Affichage dans jtable


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut Affichage dans jtable
    Bonjour!!

    Voila:j'ai une jtable que j'utilise pour afficher des données provenant d'une base de données. Dans cette jtable j'utilise une des colonnes pour s'incrémenter automatiquement (boucle while danslaquelle je mets un i++).
    Mon problème est que je veux que cette variable ne s'incréménte que si la valeur de la deuxième colonne change sinon elle doit rester la même.
    Je pense que je dois faire des tests sur le rset.getString mais je ne sais pas comment faire!!

    Exemple simple:

    col1 col2 col3
    1 x y
    2 z f
    3 t a
    3 t b

    La valeur de col1 n'a pas changé car la valeur de col2(t dans ce cas) st resée la même!!

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par mmb04
    Je pense que je dois faire des tests sur le rset.getString mais je ne sais pas comment faire!!
    C'est tellement flou qu'il est difficile de répondre autre chose que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(! valeurAComparer.equals(rset.getString(1))
           i ++;
    Montre nous ton code est essaie d'être clair quant au problème que tu rencontres ...

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Salut!!

    Ta proposition n'a pas résolu mon problème!

    Donc voila mon code:

    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
     
     
                /*** Affichage résultat requête dans la table 1 ***/
     
                int i=1;
                while(rset1.next())// & rset2.next())
                  {
                     Vector tab1 = new Vector();
                     tab1.add("Proc"+i);  //on met le nom exact de la colonne affichée dans la base
                     //à refaire pour les autres colones
                     tab1.add(rset1.getString("col2"));
                     tab1.add(rset1.getString("col3"));
                    // tab1.add(rset2.getString("col4"));
                     values.addElement(tab1);
     
                       if(rset1.equals(rset1.getString(1)))
                       {i ++;}                                   /*j'ai ajouté ces2 lignes mais  rien ne se passe (il y a toujours une incrémentation quelque soit la va leur de la deuxième colonne*/
                    // i++;
                 }
    voila et ce que je veux c'est que le i++ ne s'incréménte que s'il y a un changement au niveau de la deuxième colonne (sinon si la valeur reste la même dans le deuxième enregistrement:le i++ ne s'incrémente pas)

    j'espère que c'est plus clair!

    Merci pour votre aide!

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par mmb04
    j'espère que c'est plus clair!
    ben ... bof.
    en tout cas moi j'ai pas le courage de lire tout ça. tu as une balise code (#), ça serait utile de s'en servir. De plus, si tu ne mets que la partie qui coince ça sera plus facile pour tout le monde.

    Tu as un bouton "editer" pour faire tout ça.

    Si c'est cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(rset1.equals(rset1.getString(1)))
    {i++}
    que tu utilises pour faire ce que tu veux,
    mieux vaudrait tester des choses comparables. Là tu compares un ResultSet à un String. Il y a peu de chance que ces valeurs soient égales.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Aucune idée?!

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par mmb04
    Aucune idée?!
    ben si !

    Citation Envoyé par in
    Là tu compares un ResultSet à un String. Il y a peu de chance que ces valeurs soient égales.
    ton test ne vaut jamais vrai ... (enfin t'as l'air de dire que c'est toujours égale plutot ... ?)

    Il faut que tu testes la valeur courante avec la valeur précédante ... Si tu veux vérifier que telle valeur change il faut bien stocker cette valeur et comparer avec la nouvelle valeur non ?


    PS : merci d'avoir édité ton précédant post. c'est quand même plus clair non ?

  7. #7
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    Salut

    Ba ecoute c'est dans le model de ta table que tu doit redéfinir la méthode SetValueAt(object, row, col);
    C'est dans cette méthode que tu doit faire les test nécéssaire pour incrémenter l

  8. #8
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    Salut

    Ba ecoute c'est dans le JTableModel de ta JTable que tu doit redéfinir la méthode SetValueAt(object, row, col);
    C'est dans cette méthode que tu doit faire les test nécéssaire pour incrémenter la valeur de ta colonne si besoin.

    ++

  9. #9
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Salut!!

    Peux tu être un peu plus explicite parceque je suis débutante et ne connais pas trop les jtableModel!

    Merci pour ton aide!!

  10. #10
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    En gros il faut que tu definisse un model pour ton JTable et c'est dans le modele que tu fais les control nécéssaire et pas dans la vue comme tu dois le faire actuellement je présume

    Voici un exemple de JTable avec son model :

    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
     
    // ui de ton modèle
    public TableDemo() {
        ...
        JTable table = new JTable(new MyTableModel());
        ...
    }
     
    //model défini pour ta JTable
    // il faut que tu complete les tableau representant les nom de colonne et celui //contenant les objets
    //l'affichage se fera alors tout seul
    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = ...//nom de tes colonnes...
        private Object[][] data = ...//objet contenu dans ta tables...
     
        public int getColumnCount() {
            return columnNames.length;
        }
     
        public int getRowCount() {
            return data.length;
        }
     
        public String getColumnName(int col) {
            return columnNames[col];
        }
     
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
     
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
     
        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }
     
        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
     
    //ici faire les test nécéssaire et mettre le i++ si le test est positif
     
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }
        ...
    }

  11. #11
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Juste pour préciser la chose d'un point de vue 'conceptuel',

    ta vue ( JTable ) observe un modèle ( AbstractTableModel ) et lui demande pour chaque action quelle est la conduite à tenir. Tu as un transfert de responsabilité entre la vue et le modèle.

    Donc quand ton modèle reçoit un 'setValue', il peut décider de la suite à donner à cet évènement.

    Dans ton cas, avant de modifier une valeur, libre à toi de vérifier la valeur d'autres colonnes.



    Hope it helps !

  12. #12
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Salut!!

    Pour l'objet contenu dans ma table j'utilise un ResultSet qui contient le résultat d'une requête SQL sur ma base de données.

    Or la déclaration de data doit être sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Object[][] donnees = {{"", "", "", ""},
                          {"", "", "", ""},    //données allant être affichées dans la table
                          {"", "", "", ""}};
    Sais tu comment je dois faire pour les ResultSet? Est ce que je dois reprendre mon while?

    Merci pour ton aide!

  13. #13
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Voila en gros à quoi doit ressembler ta fonction de remplissage de tes données, attention je ne l'ai pas compilé !
    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
     
    int i=1;
    int index = 1 ;
    String temp = new string();
     
                while(rset1.next())
                  {
                     String nv = rset1.getString(1) ;
                     if( ! temp.equals("") )
                     {
                         if( nv != temp ) { index ++; }
                         data[i][ 1 ] = index;
                         data[i][ 2 ] = nv;
                     }
                     temp = nv ;
     
                 }

  14. #14
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Juste une petite modif :

    Citation Envoyé par g0up1l
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                while(rset1.next())
                  {
                     String nv = rset1.getString(1) ;
                     if( ! "".equals(temp) )  // ou length==0 ou isEmpty()
                     {
                         if( ! nv.equals(temp) ) { index ++; }
                         ...
     
                 }
    (Il faut utuliser equals() pour tester les String)

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/12/2009, 17h29
  2. Probleme affichage arraylist dans jtable
    Par brew94 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/12/2008, 13h31
  3. probleme d affichage dans jtable
    Par zeero_cool dans le forum Composants
    Réponses: 8
    Dernier message: 02/09/2008, 14h57
  4. Réponses: 3
    Dernier message: 13/08/2007, 23h30
  5. [JTable] PB affichage dans une JTable
    Par ythim dans le forum Composants
    Réponses: 3
    Dernier message: 19/05/2006, 17h29

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