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] Cellules multilignes dans un jtable [FAQ]


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut [JTable] Cellules multilignes dans un jtable
    Est-il possible de faire ceci avec 1 JTable :

    genre agrandir la hauteur d'une ligne selon la taille du champ
    si oui, cmt?

  2. #2
    Membre régulier
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Points : 119
    Points
    119
    Par défaut
    A mon avis oui.

    Voici en tout cas un bon point de départ: http://java.sun.com/docs/books/tutor...nts/table.html

    J'ai déjà un peu travaillé avec les JTables et c'est très puissant.

  3. #3
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    peut-être qu'il faut que je change le type de données du champ désignation?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 73
    Points : 78
    Points
    78
    Par défaut
    Bonjour

    Ce code fait varier la hauteur de lignes en fonction de ce quelles contiennent... Dans mon exemple, ce calcul de hauteur est totalement arbitraire...

    Mais ce n'est pas tout, les renderers par défaut ne font pas retour a la ligne....
    Ce n'est pas tres dur a faire... il suffit je pense d'utiliser des JLabel avec du HTML....

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;
     
    /**
     * Classe Ex1
     */
    public class Ex1 extends JFrame{
    	public static String titres[]={"col1","col2","col3","col4"};
    	public static String valeurs[][]={
    		{"valeur 1","valeur 2","valeur 3","valeur 4"},
    		{"valeur 5","valeur 6","valeur 7","valeur 8"},
    		{"valeur 9","valeur 10","valeur 11","valeur 12"},
    		{"valeur 13","valeur 14","valeur 15","valeur 16"}
    	};
     
    	public static class Modele extends AbstractTableModel {
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#getColumnCount()
    		 */
    		public int getColumnCount() {
    			return titres.length;
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#getRowCount()
    		 */
    		public int getRowCount() {
    			return valeurs.length;
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#isCellEditable(int, int)
    		 */
    		public boolean isCellEditable(int rowIndex, int columnIndex) {
    			return true;
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#getColumnClass(int)
    		 */
    		public Class getColumnClass(int columnIndex) {
    			return String.class;
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#getValueAt(int, int)
    		 */
    		public Object getValueAt(int rowIndex, int columnIndex) {
    			return valeurs[rowIndex][columnIndex];
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
    		 */
    		public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    			valeurs[rowIndex][columnIndex]=aValue.toString();
    			fireTableDataChanged();	// Signal que les valeurs ont change
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.table.TableModel#getColumnName(int)
    		 */
    		public String getColumnName(int columnIndex) {
    			return titres[columnIndex];
    		}
     
    	}
     
    	public static class Table extends JTable{
     
    		public Table(){
    			super(new Modele());	// avec cette initialisation l'instance fait partie des listener de TableModelEvent
    			setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    			getTableHeader().setResizingAllowed(false); 
    		}
     
    		/* 
    		 * Declenché lors d'un changement de valeurs dans le modele 
    		 */
    		public void tableChanged(TableModelEvent e) {
    			super.tableChanged(e);
    			TableColumnModel modelecolonne=getColumnModel();
    			TableModel modele=getModel();
    			int total=getRowCount();
    			for(int i=0;i<total;i++){
    				int taille=0;
    				int total2=modelecolonne.getColumnCount();
    				for(int j=0;j<total2;j++){
    					// Partie determinant la taille de la cellule de ligne i et de colonne j
    					int taille2=modele.getValueAt(i,j).toString().length()*2+10;	// determination arbitraire
    					if(taille2>taille){
    						taille=taille2;
    					}
    				}
    				setRowHeight(i,taille);
    			}
     
    		}
     
    	}
     
    	public Ex1(){
    		super("");
     
    		getContentPane().add(new JScrollPane(new Table()));
     
    		setSize(320,200);
    		setVisible(true);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    	public static void main(String args[]) {
    		new Ex1();
    	}
    }
    Cordialement,
    PS : N'oublie pas le tag [Résolu] (en cliquant sur http://pouiller.eclipse.free.fr/avatar/resolu.gif), si ton problème est résolu...

  5. #5
    Membre régulier
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Points : 119
    Points
    119
    Par défaut
    Regarde au niveau des CellRenderer, TableRenderder, ... Si je me souviens bien, il y a des exemples dans le tutorial SUN.

  6. #6
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    mais si je met 1 phrase qui dépasse c'est ok qu'il agrandi en hauteur la ligne mais le mot n'est pas mis sur plusieurs lignes, il met des ... à la place
    car ds l'exemple il met plusieurs phrases dans la même cellule

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 73
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Il faut calculer les longueurs avec FontMetrics des chaines de caractères afin
    de determiner les points de retour de ligne et d'utiliser des JLabel et du HTML
    (retour a la ligne <BR/>) ou d'implementer un renderer qui realisera ces retour a la ligne...

    Pour info les renderer sont des objets qui permettent le rendu d'une cellule...

    Cordialement,
    PS : N'oublie pas le tag [Résolu] (en cliquant sur http://pouiller.eclipse.free.fr/avatar/resolu.gif), si ton problème est résolu...

  8. #8
    Membre régulier
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Points : 119
    Points
    119
    Par défaut
    Je pense que si tu cherches au niveau des TableCellRenderer, tu devrais trouver ton bonheur.

    Tu peux aussi regarder au niveau des exemples. Dans mon install sous <java-sdj-install>/demo/jfc/SwingSet2, il y a un exemple de JTable assez complet (il me semble).

  9. #9
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    encore 1 précision, pour faire la comparaison, c'est comme en Excel, quand on veut écrire dans une cellule et on la configure avec Renvoi automatique à la ligne pour le texte, et ainsi quand le texte dépasse la largeur de la colonne c'est la hauteur qui est changée, pour faire 1 cellule multiligne...
    j'espère qu'avec cela vous pourrez mieux comprendre...

  10. #10
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    je viens de matter ça, c'est vraiment bien fait, mais cela ne fait pas encore mon bonheur

  11. #11
    Membre régulier
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Points : 119
    Points
    119
    Par défaut
    ah bon ?

    Il me semble que le TableCellRenderer peut renvoyer n'importe quoi (un Component) et donc aussi un JPanel ou JLabel avec du code HTML et pourquoi pas avec des <br>...

    Ce n'est peut-être pas triviale comme implémentation, mais je pense que c'est la solution. Il faut probablement réimplémenter plusieurs méthodes, mais cela devrait fonctionner. non ? Quelqu'un a déjà utiliser les TableCellRenderer ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 73
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    J'ai déjà implémenter ce genre de choses...
    Les JTable sont quelquechose de fantastiques mais assez complexes...
    Tu peux faire a peu pres n'importe quoi mais c'est pas toujours tres evident
    et ca demande du temps (pour la realisation et pour trouver le moyen de le faire)...

    Je m'étais servi du livre

    Swing la synthèse : Développement des interfaces graphiques en Java de Dunod
    http://java.developpez.com/livres/#L2100081799
    Perso, j'ai trouve que c'etait un tres bon livre

    Je peux egalement te proposer de participer au sondage sur les tutorials desires... On sait jamais ??!!

    Cordialement,
    PS : N'oublie pas le tag [Résolu] (en cliquant sur http://pouiller.eclipse.free.fr/avatar/resolu.gif), si ton problème est résolu...

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Quelqu'un a déjà utiliser les TableCellRenderer ?
    Oui, le principe est assez simple. C'est une interface demandant d'implémenter une méthode retournant un composant graphique qui sera affiché dans la cellule du tableau. Le renderer par défaut s'appuie sur un JLabel, mais pour avoir du multiligne, tu peux utiliser par exemple un JTextArea comme renderer.

    Bon, voici un point de départ (pas testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MultilineCellRenderer implements TableCellRenderer {
     
      private JTextArea textArea;
     
      public MultilineCellRenderer() {
        textArea = new JTextArea();
      }
     
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        textArea.setText(value.toString());
        return textArea();
      }
     
    }
    Bon, c'est à compléter. Il faut par exemple changer le fond du composant s'il est sélectionné (isSelected), ou faire un setLineWrap(true) sur le textArea. Mais c'est une base de départ.

  14. #14
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    je vien de tester mais je suis caller pour l'implémenter sur ma jtable...
    cmt je dois faire pour appeler la classe que tu m'a passé?

  15. #15
    Membre à l'essai
    Profil pro
    Dev
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Après maintes recherches et tests, j'y suis arrivé, mtn je sais affiché +ieurs lignes dans 1 cellule,
    je passes le code, cela peut toujours servir, car cela m'a servit
    1er fichier MultiLineCellEditor .java (édition de la cellule):
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.*;
     
     
    public class MultiLineCellEditor extends AbstractCellEditor implements TableCellEditor {
     
      MyTextArea textArea;
    	JTable table;
     
    	public MultiLineCellEditor(JTable ta) {
    		super();
    		table = ta;
    		// this component relies on having this renderer for the String class
    		MultiLineCellRenderer renderer = new MultiLineCellRenderer();
    		table.setDefaultRenderer(String.class,renderer);
    //                JOptionPane.showMessageDialog(null,"jui ds l'editor","h",JOptionPane.INFORMATION_MESSAGE);
    		textArea = new MyTextArea();
    		textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
    		for(int i=0;i<table.getRowCount();i++) updateRow(i);
    	}
     
    	/** This method determines the height in pixel of a cell given the text it contains */
    	private int cellHeight(int row,int col) {
    		if (row == table.getEditingRow() && col == table.getEditingColumn())
    		  return textArea.getPreferredSize().height;
    	  else
    		  return table.getDefaultRenderer(String.class).getTableCellRendererComponent(table,
    			  table.getModel().getValueAt(row,col),false,false,row,col).getPreferredSize().height;
    	}
     
    	void cellGrewEvent(int row,int column) {
    		updateRow(row);
    	}
     
    	void cellShrankEvent(int row,int column) {
    		updateRow(row);
    	}
     
    	void updateRow(int row) {
    		int maxHeight = 0;
    		for(int j=0;j<table.getColumnCount();j++) {
    			int ch;
    			if ((ch = cellHeight(row,j)) > maxHeight) {
    			  maxHeight = ch;
    			}
    		}
    		table.setRowHeight(row,maxHeight);
    	}
     
    	public Object getCellEditorValue() {
    		return textArea.getText();
      }
     
    	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
    						int row, int column) {
    		textArea.setText(table.getValueAt(row,column).toString());
    		textArea.rowEditing = row;
    		textArea.columnEditing = column;
    		textArea.lastPreferredHeight = textArea.getPreferredSize().height;
    		return textArea;
    	}
     
    	class MyTextArea extends JTextArea implements KeyListener {
    		int lastPreferredHeight = 0;
    		int rowEditing;
    		int columnEditing;
     
    		MyTextArea() {
    			addKeyListener(this);
    			// This is a fix to Bug Id 4256006
    			addAncestorListener( new AncestorListener(){
    				public void ancestorAdded(AncestorEvent e){
    				  requestFocus();
    			  }
    			  public void ancestorMoved(AncestorEvent e){}
    			  public void ancestorRemoved(AncestorEvent e){}
    			});
    		}
     
    		public void keyPressed(KeyEvent e) {}
    		public void keyReleased(KeyEvent e) {}
    		public void keyTyped(KeyEvent e) {
    			if (getPreferredSize().getHeight() > lastPreferredHeight) {
    				lastPreferredHeight = getPreferredSize().height;
    				cellGrewEvent(rowEditing,columnEditing);
    				// this will trigger the addition of extra lines upon the cell growing and
    				// prevent all the text being lost when the cell grows to the point of requiring
    				// scrollbars
    				table.setValueAt(getText(),rowEditing,columnEditing);
    			}
    			else if (getPreferredSize().getHeight() < lastPreferredHeight) {
    				lastPreferredHeight = getPreferredSize().height;
    				cellShrankEvent(rowEditing,columnEditing);
    			}
    			else if (table.getValueAt(rowEditing,columnEditing).equals(""))
    				table.setValueAt(getText(),rowEditing,columnEditing);
     
    	  }
    	}
    }
    2e fichier :MultiLineCellRenderer
    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
     
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
     
    public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
     
      public MultiLineCellRenderer() {
        setEditable(false);
        setLineWrap(true);
        setWrapStyleWord(true);
      }
     
      public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected, boolean hasFocus, int row, int column) {
     
        if (value instanceof String) {
          setText((String)value);
          // set the table's row height, if necessary
    			//updateRowHeight(row,getPreferredSize().height);
        }
        else
          setText("");
        return this;
      }
    }
    et pour tester :
    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
     
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.border.*;
    import java.util.*;
     
    public class MultiLineCellExample {
     
      public static void main(String[] args) {
    		JFrame f = new JFrame();
     
        DefaultTableModel dm = new DefaultTableModel() {
          public Class getColumnClass(int columnIndex) {
            return String.class;
          }
        };
    //    dm.setDataVector(new Object[][]{{"aa","bb","cc"},
    //                                    {"A\nA","B\nB","C\nC"}},
    //                     new Object[]{"1","2","3"});
        dm.setDataVector(new Object[][]{{"aa\na","bb","cc"}},
                         new Object[]{"1","2","3"});
     
        JTable table = new JTable( dm );
    		MultiLineCellEditor editor = new MultiLineCellEditor(table);
    		table.setDefaultEditor(String.class,editor);
     
        JScrollPane scroll = new JScrollPane( table );
        f.getContentPane().add( scroll );
        f.setSize( 400, 400 );
        f.setVisible(true);
      }
    }
    voilà je vous laisses comprendre le code
    a+

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    SAlut,

    J'ai testé le code , ca marche bien

    Par contre, si on veut un retour à la ligne automatique lorsqu'on construit notre JTable, on est obligé de mettre dans la chaine la valeur \n, autrement, le renderer ne coupe pas automatiquement la chaine par rapport à la longueur de la ligne à la construction.

    De plus, utilisé un JTextArea permet de gérer le \n dans la cellule, mais je me rend compte que si on redimensionne une colonne dynamiquement, le renderer ajustre le texte par rapport à la hauteur de la ligne: en gros si on reduit trop la largeur de la colonne, on ne va pas augmenter lahauteur de la ligne pour prendre en compte tout le texte
    (sauf lorsqu'on insere du texte!)

    Comment rémedier à cela?

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

Discussions similaires

  1. [JTable] Calcul automatique dans un JTable
    Par jason-red dans le forum Composants
    Réponses: 4
    Dernier message: 19/10/2006, 11h53
  2. [JTable] PB affichage dans une JTable
    Par ythim dans le forum Composants
    Réponses: 3
    Dernier message: 19/05/2006, 17h29
  3. [JTable] Un JButton dans une cellule
    Par Sarrus dans le forum Composants
    Réponses: 19
    Dernier message: 31/08/2005, 16h29
  4. [JTable] Cellules multilignes
    Par mardona dans le forum Composants
    Réponses: 4
    Dernier message: 01/08/2005, 10h27
  5. [JTable] Un ScrollPane dans une cellule
    Par Colonel Renard dans le forum Composants
    Réponses: 3
    Dernier message: 25/07/2005, 16h54

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