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] probleme de rafraichissement (conception?)


Sujet :

Composants Java

  1. #1
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut [jTable] probleme de rafraichissement (conception?)
    bonjour,
    j'ai parcouru pas mal de post concernant les jtables, et je n'arrive pas à trouver ce que je dois faire pour mettre a jour mon affichage.
    dans une jframe j'inclus un JScrollPane qui contient ma Jtable. A l'aide d'une jComboBox je fais differentes requetes à une BDD poiur remplir ma jtable (qui ne varie que sur le nombre de tuples). le probleme est que lorsque je change la table, il n'y a pas de refresh. j'ai essayé le repaint() à differents endroits de mon programme mais rien n'y 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
     
    public void actionPerformed(ActionEvent e)
        {
            if(e.getSource()==jComboBox1){
                bou = (String)jComboBox1.getSelectedItem();
     
            String theta = noyau.bddChantierEnCourEmployes.chopeFonction(bou);
            int chalou = noyau.bddChantierEnCourEmployes.chopeLongueurColSansFiniArchive(bou, theta);
            String paf = "";
            paf = paf.valueOf(chalou+" chantiers en cours");
            jLabel1.setText(paf);
            Object chelou[][]= noyau.bddChantierEnCourEmployes.chopeListeChantier(chalou,bou,theta);
            String[] titreColonnes = { "Numero du chantier", "Nom du chantier", "Client","Calculateur", "Dessinateur"};
            JTable jTable2 = new JTable(chelou, titreColonnes);
            this.jTable2 = jTable2;
            JScrollPane jScrollPane12 = new JScrollPane();
            jTable2.setModel(new MyTableModel(chelou, titreColonnes));
            jTable2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
               TableColumn col;
            col = jTable2.getColumnModel().getColumn(0);
            col.setPreferredWidth(60);
            col = jTable2.getColumnModel().getColumn(1);
            col.setPreferredWidth(350);
            col = jTable2.getColumnModel().getColumn(2);
            col.setPreferredWidth(110);
            getContentPane().add(jScrollPane12,new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 20, 700, 500));
            jScrollPane12.setOpaque(true);
            jTable2.setOpaque(true);
            jScrollPane12.setViewportView(jTable2);
            this.jScrollPane2= jScrollPane12;
            this.jTable2 = jTable2;
            int chaton = noyau.bddChantierEnCourEmployes.chopeLongueurColWhere(theta);
            String[] chat = noyau.bddChantierEnCourEmployes.chopeCouleulr(chaton, bou,theta);
            for(int h = 0; h<chalou; h++){
                for(int pouf = 0; pouf <chaton; pouf ++)
                {
                    if(((String)jTable2.getValueAt(h,0)).compareTo(chat[pouf]) == 0){
                    this.monarraylist.add(new Integer(h));    
                    }
                }
            }
            jTable2.setDefaultRenderer(String.class, new ColorRenderer());
            jTable2.repaint();
            this.jScrollPane2.repaint();
            repaint();
    }
    ps : j'ai quand même un doute sur la création de la table directement dans l'ActionListener, mais ca ne devrait pas changer beaucoup si?

  2. #2
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Bonjour,
    as tu essayer validate()?
    Ton tableau est-il bien re-rempli, même si il ne s'affiche pas?

  3. #3
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    je viens d'essayer validate(), mais ca ne change rien.
    en fait la premiere fois que je choisis un tableau dans ma combobox celui ci s'affiche bien, c'est lors du changement que l'affichage ne se fait plus, c'est l'ancien tableau qui reste affiché. et oui mes données changent bien

  4. #4
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Essaie sinon de remove ton tableau et de le réafficher(add), c'est un peu barbare mais bon...

    Sinon le mieux serait de faire un model et de ne pas oublier de faire un fireTableCellUpdated.

  5. #5
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    j'ai déjà un model en 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
     
    class ColorRenderer extends DefaultTableCellRenderer {
             public ColorRenderer() {
                 jTable2.repaint();
     
            repaint();
                }
             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
                  if (monarraylist.contains(new Integer(row))){
                                      setBackground(Color.RED);
                         }
                  else {
                        setBackground(Color.WHITE);
                       }
              super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
              return this;
             }
        }
    et pour le tableau :
    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
    86
    87
     
    class MyTableModel extends AbstractTableModel {
             String[] columnNames ;
             Object[][] data ;
     
            public MyTableModel(Object[][] data, String[] columnNames ){
                this.data = data;
                this.columnNames = columnNames ;
                fireTableStructureChanged();
            }
            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];
            }
     
            /*
             * JTable uses this method to determine the default renderer/
             * editor for each cell.  If we didn't implement this method,
             * then the last column would contain text ("true"/"false"),
             * rather than a check box.
             */
            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 < 5) {
                    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) {
                if (DEBUG) {
                    System.out.println("Setting value at " + row + "," + col
                                       + " to " + value
                                       + " (an instance of "
                                       + value.getClass() + ")");
                }
     
                data[row][col] = value;
                fireTableCellUpdated(row, col);
                fireTableStructureChanged();
                if (DEBUG) {
                    System.out.println("New value of data:");
                    printDebugData();
                }
            }
            public void setData(Object[][] data) {
                this.data = data;
                fireTableDataChanged();
        }
            private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();
                for (int i=0; i < numRows; i++) {
                    System.out.print("    row " + i + ":");
                    for (int j=0; j < numCols; j++) {
                        System.out.print("  " + data[i][j]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
            }
        }

  6. #6
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Je suis désolé mais je vois pas alors car je pense que ton model de table est Ok
    Si tu veux j'ai une solution mais vraiment moche

    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
     
     
    public void actionPerformed(ActionEvent evenement){
     
     
     
    		getContentPane().remove(tonJScrollPane_ou_JTable);
     
    		//tu recreer un modele
     
    		ModelTable mod = new ModelTable(...);
    		TonJTable = new JTable(mod);
     
     
     
    		sc1=new JScrollPane(TonJTable);
     
                    getContentPane().add(tonJScrollPane_ou_JTable);
     
     
     
    		for(int i=0;i<nb_ligne;i++){
    		        //tu remplis ton JTable
    			TonJTable.setValueAt(...);
     
     
     
    			}
     
     
     
     
     
     
    		}
     
    });
    Voilà ca marche mais c'est pas beau je te l'avais dit

  7. #7
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    hum...
    le modele fonctionne car je l'ai repris d'une autre parti de mon programme.
    donc tu me conseilles denlever le tableau pour le remettre apres. je vais essayer (dans ce cas il faut totu de meme creer le tableau avant sinon je remove un truc qui nexiste pas aussi)

  8. #8
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    non decidement ca ne marche pas, jai essayé plein de trucs, en enlevant la table puis en la remettant, je ne vois toujours pas ce qui cloche

  9. #9
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    C'est bizarre, j'avais le même problème que toi:
    -2 JCombobox pour choisir le type de donnée à afficher
    -un tableau avec un modele pour les afficher
    -sur l'actionperformed, je mettais une requête BDD

    Et ca fonctionnait, attend je vais voir si je peux trouver le code(un peu chaud je suis au boulot là...)

  10. #10
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    merci
    la je fais tout sur l'actionperformed de la creation de la jtable a la requete, ca peut jouer?

  11. #11
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    J'ai retrouvé le code, j'essaie de le simplifier un peu car la classe fait plus de 2000 lignes...
    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
     
     
    box.addActionListener(new ActionListener(){
     
    	public void actionPerformed(ActionEvent evenement){
     
    		//ici je selectionne "Nom" dans la Combobox
    		if(String.valueOf(box.getSelectedItem()).equalsIgnoreCase("Nom")==true){
     
     
    			//je vire le JScrollPane et donc le tableau(car je l'avais afficher dés le départ)
    			getContentPane().remove(sc1);
     
    			//ici ca me renvoie juste le nombre de ligne à afficher	
    			nb = nom.Retourne_Nb_lig();
     
    			//nouveau tableau de String avec le nombre de ligne
    			tab = new String[nb][6];
     
         			//Dans tab je met le resultat de ma requête
    			tab = nom.Retourne_TabA(tab);
     
    			//Je creer un nouveau modele avec mon nouveau tableau		
    			ModelTable3 mod = new ModelTable3(nb,true);
    			tab1 = new JTable(mod);
     
    			//je met le tableau dans le JScrollPAne			
    			sc1=new JScrollPane(tab1);
    			getContentPane().add(sc1);
     
     
    			//je rempli mon JTable	
    			for(int i=0;i<nb;i++){
     
    				tab1.setValueAt(tab[i][0],i,0);
    				tab1.setValueAt(tab[i][1],i,1);
    				tab1.setValueAt(tab[i][2],i,2);
    				tab1.setValueAt(tab[i][3],i,3);
    				tab1.setValueAt(tab[i][4],i,4);
    				tab1.setValueAt(tab[i][5],i,5);
     
    						}
     
     
    			}
     
     
     
    	}
     
    });
    Voilà c'était çà mais bon çà date donc c'est vraiment pas super comme technique...

  12. #12
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    ok je vais tester ca (p-e demain).

    mais moi ds mon prog je remplis la jtable en meme temps que je la crée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JTable jTable2 = new JTable(chelou, titreColonnes);
    je verrai bien si ca a une importance.

    merci pr le code

  13. #13
    Invité
    Invité(e)
    Par défaut
    this.monarraylist.add(new Integer(h));
    c'est ça ta méthode pour remplir ta JTable ?
    D'où viens monarraylist ?
    Es-tu sûr que avec ça le modèle de la JTable est modifié ?
    Peux-être as-tu fais un binding de monarraylist avec le model de ta table ?

    tab1.setValueAt(tab[i][0],i,0);
    Cela parais dèja plus commun.

  14. #14
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    non monarraylist est un petit code a part pour colorier en rouge certaines lignes de mon tableau.Et ne change en aucun cas le contenu du tableau, ce code marche est n'est pas le probleme (enfin je ne verrasi pas pourquoi).

    mon tableau vient de se code la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Object chelou[][]= noyau.bddChantierEnCourEmployes.chopeListeChantier(chalou,bou,theta);
            String[] titreColonnes = { "Numero du chantier", "Nom du chantier", "Client","Calculateur", "Dessinateur"};
            JTable jTable2 = new JTable(chelou, titreColonnes);
    a chaque fois que je selectionne quelqu'un d'autres dans ma combobox il y a une nouvelle requete qui s'effectue -> changemetn du tableau.

  15. #15
    Invité
    Invité(e)
    Par défaut
    dans le code de ton premier post, il y a plusieurs chose qui me gène

    JTable jTable2 = new JTable(chelou, titreColonnes);
    this.jTable2 = jTable2;
    JScrollPane jScrollPane12 = new JScrollPane();
    jTable2.setModel(new MyTableModel(chelou, titreColonnes));
    à quoi ca sert d'utiliser une variable jTable2 alors que ton objet contient cet attribut ? Tu initialise 2 fois le model de ta JTable ?

    il y a une nouvelle requete qui s'effectue -> changemetn du tableau
    c'est à dire, c'est le actionPerformed de ton premier post ?

  16. #16
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    D'une part, moi j'utilise toujours une ArrayList dans le Model plutôt qu'un tableau : beaucoup plus simple pour l'ajout ou la suppression de ligne. Bon ok, tu n'as pas l'air de vouloir ajouter des lignes, mais bon, moi je fais comme ça...

    Sinon, ton model a l'air correct.

    Pour ce qui est de l'ActionListener, je créerai effectivement ma table à l'extérieur, je lui affecterai le modèle, et dans l'ActionListener, je ne ferai que faire un setData() dans lequel je passerai le résultat de ma requête.

  17. #17
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    j'aurai pu ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JTable jTable2 = new JTable();
            this.jTable2 = jTable2;
            JScrollPane jScrollPane12 = new JScrollPane();
            jTable2.setModel(new MyTableModel(chelou, titreColonnes));
    ca ne change rien. je ne l'initialise qu'une fois et apres je lui attribue mon model.

    à quoi ca sert d'utiliser une variable jTable2 alors que ton objet contient cet attribut ?
    tu parles de mon tableau d'objet?

    il y a une nouvelle requete qui s'effectue -> changemetn du tableau
    c'est à dire, c'est le actionPerformed de ton premier post ?
    oui actionperformed fait une requete et refais un tableau.

  18. #18
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    ArrayList dans le Model plutôt qu'un tableau : beaucoup plus simple pour l'ajout ou la suppression de ligne. Bon ok, tu n'as pas l'air de vouloir ajouter des lignes, mais bon, moi je fais comme ça...
    et bien le nombre de ligne depend de ce que j'ai dans ma base de données... elle peut donc tres bien varier, c'est pour cela que je pensais recreer le tableau a chaque fois, et non pas enlever/ajouter des lignes.

    si jutilise setData() cela implique que je supprime / rajoute les lignes en fonction de mon resultat? je pensais que recreer u ntableau serait plus rapide niveau code mais si ca ne marche pas... je vais retenter de le construire avant le combobox.

  19. #19
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par lkryss
    et bien le nombre de ligne depend de ce que j'ai dans ma base de données... elle peut donc tres bien varier, c'est pour cela que je pensais recreer le tableau a chaque fois, et non pas enlever/ajouter des lignes.
    Ce que je voulais dire c'est que tu n'as pas l'intention d'ajouter ou de supprimer dynamiquement des lignes : sélectionner une ligne et la supprimer parce qu'elle ne t'intéresse pas.
    Mais faut dire que j'aime pas les tableaux aussi


    Citation Envoyé par lkryss
    si jutilise setData() cela implique que je supprime / rajoute les lignes en fonction de mon resultat? je pensais que recreer u ntableau serait plus rapide niveau code mais si ca ne marche pas... je vais retenter de le construire avant le combobox.
    Faire appel à setData() va remplacer ton tableau d'objets "data" par celui que tu vas passer en paramètre.
    Donc ça remplace ton tableau par un nouveau...

    Le truc c'est qu'une JTable fonctionne plus ou moins selon le système MVC (Modele - Vue - Controleur).
    Ta JTable correspond à ta vue, autrement dit, juste une IHM te permettant de visualiser tes données; données qui sont stockées dans ton Model (qui correspond au Modèle du MVC).

    Tu n'as donc pas besoin de recréer un nouvel objet JTable à chaque fois. Ce que tu dois faire, c'est modifier les données de ton Model et avertir la JTable associée qu'il y a eu du changement dans les données (via les "fireXXX()")
    Et ne recrée pas non plus un nouveau Model à chaque fois, modifies juste son tableau d'objets (ou son ArrayList) "data".

  20. #20
    Invité
    Invité(e)
    Par défaut
    u n'as donc pas besoin de recréer un nouvel objet JTable à chaque fois. Ce que tu dois faire, c'est modifier les données de ton Model et avertir la JTable associée qu'il y a eu du changement dans les données (via les "fireXXX()")
    Et ne recrée pas non plus un nouveau Model à chaque fois, modifies juste son tableau d'objets (ou son ArrayList) "data".
    +1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2010, 10h17
  2. [JTable] Probleme de rafraichissement
    Par Renaud-62 dans le forum Composants
    Réponses: 2
    Dernier message: 24/06/2008, 15h39
  3. Réponses: 4
    Dernier message: 24/08/2007, 16h44
  4. Réponses: 8
    Dernier message: 24/05/2007, 18h09
  5. [JTable] probleme de rafraichissement
    Par biozaxx dans le forum Composants
    Réponses: 6
    Dernier message: 13/02/2006, 14h14

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