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 :

Relachement JButton dans une Jtable


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Relachement JButton dans une Jtable
    Bonjour à tous,

    J'ai un problème de relâchement d'un bouton dans une JTable.
    Lors d'un clique sur un bouton, lors d'une mise a jour de table par fireTableDataChanged(), le bouton reste afficher!
    Voir la photo ci-dessous:

    Nom : 394142.jpg
Affichages : 31
Taille : 13,4 Ko

    Si je clique ensuite dans n'importe qu'elle cellule, le bouton disparaît.

    J'ai essayé de joué sur la sélection de cellule après l'appuie du bouton.
    Mais ça n'a rien changé!

    Merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Curieusement, si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.changeSelection(row, (column-1), false, false);
    Je n'ai aucun changement.
    Mais si j'écris:
    Le problème est résolu!

    La solution qui fonctionne mais si il y a une autre méthode je suis preneur.

    J'ai écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(bugbutton){
    	table.selectAll();// On sélection
    	table.clearSelection();// On dé-sélectionne
    }
    Avez vous une autre idée?

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Comment sont faits/configurés tes editors/renderers
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Salut Sinok, merci pour ton aide.

    Voici mon renderer:
    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
    public class ButtonRenderer extends JButton implements TableCellRenderer{
    	private String text_bouton;
    	private JButton bouton;
    	private Font police;
     
    	public ButtonRenderer(String text_bouton) {
    		// TODO Auto-generated constructor stub
    		//bouton= new JButton();
    		this.text_bouton=text_bouton;
    		this.setMargin(new Insets(1, 1, 1, 1));
    	}
     
    	public Component getTableCellRendererComponent(	JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
    		//On écrit dans le bouton avec la valeur de la cellule
    		if(text_bouton=="operation_recettes"){
    			Tableau_operation_recettes_model table_model = (Tableau_operation_recettes_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="ajout_depense_recette_detail"){
    			Tableau_depense_recette_model table_model = (Tableau_depense_recette_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    			setEnabled(((table_model.getValueAt(row, 1, 1)=="non" && col==1) || value=="") ? false : true);
    		}
    		else if(text_bouton=="ajout_depense_suppression" || text_bouton=="ajout_recette_suppression"){
    			Tableau_depense_recette_model table_model = (Tableau_depense_recette_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="pointage_compta"){
    			Tableau_pointage_compta_model table_model = (Tableau_pointage_compta_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    			setEnabled(((table_model.getValueAt(row, 1, 1)=="non" && col==1) || value=="") ? false : true);
    		}
    		else if(text_bouton=="competitions"){
    			Tableau_tournoi_boissons_model table_model = (Tableau_tournoi_boissons_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="articles_endose" || text_bouton=="articles_prix_de_vente" || text_bouton=="articles_affichage" || text_bouton=="articles_inventaire" || 
    				text_bouton=="articles_suppression"){
    			Tableau_article_model table_model = (Tableau_article_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="membres_affichage" || text_bouton=="membres_forfait" || text_bouton=="membres_suppression"){
    			Tableau_membres_model table_model = (Tableau_membres_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="correction_heures"){
    			Tableau_heure_de_jeu_model table_model = (Tableau_heure_de_jeu_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="fournisseur_affichage" || text_bouton=="fournisseur_suppression"){
    			Tableau_fournisseurs_model table_model = (Tableau_fournisseurs_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="approvisionnement_modifier"){
    			Tableau_liste_approvisionnements_model table_model = (Tableau_liste_approvisionnements_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="approvisionnement_supprimer"){
    			Tableau_liste_approvisionnements_model table_model = (Tableau_liste_approvisionnements_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="palier_heures_affichage" || text_bouton=="palier_heures_suppression"){
    			Tableau_palier_heures_model table_model = (Tableau_palier_heures_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="syntheses_compta_detail"){
    			Tableau_synthese_compta_model table_model = (Tableau_synthese_compta_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    			setEnabled(((Integer)table_model.getValueAt(row, col-1, 0)==0) ? false : true);
    		}
    		else if(text_bouton=="remise_suppression" || text_bouton=="retrait_suppression"){
    			Tableau_remise_retrait_especes_model table_model = (Tableau_remise_retrait_especes_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="remise_cheque_suppression" || text_bouton=="remise_de_cheque_detail"){
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="filtres_frequent" || text_bouton=="filtres_affichage" || text_bouton=="filtres_suppression"){
    			Tableau_filtres_model table_model = (Tableau_filtres_model) table.getModel();
    			setText((value != null) ? value.toString() : "");
    			if(text_bouton=="filtres_frequent"){
    				setEnabled(table_model.getValueAt(row, 0, 0).equals("") ? false : true);
    			}
    		}
    		else if(text_bouton=="inventaire_caisse_suppression"){
    			setText((value != null) ? value.toString() : "");
    			setEnabled((row!=0) ? false : true);
    		}
    		else if(text_bouton=="operation_livret_suppression"){
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="dose_suppression"){
    			setText((value != null) ? value.toString() : "");
    		}
    		else if(text_bouton=="stock_inventaire_detail" || text_bouton=="stock_inventaire_suppression"){
    			setText((value != null) ? value.toString() : "");
    			setEnabled(value.equals("") ? false : true);
    		}
     
    		if(police!=null){
    			this.setFont(police);
    	    }
     
    		//on retourne notre bouton
    		return this;
    	}
    	/**
             * @param police
             * @uml.property  name="police"
             */
    	public void setPolice(Font police) {
    		// TODO Auto-generated method stub
    		this.police = police;
    	}
    }
    Et voici mon editor :
    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    public class ButtonEditor extends DefaultCellEditor {
    	static Logger logger = Logger.getLogger("ButtonEditor.class");
    	protected JButton button;
    	private ButtonListener bListener = new ButtonListener();
    	private String bouton;
    	private Model model;
    	private Font police;
    	public Membres membres;
    	private Tableau_operation_recettes_model table_model2;
    	private Datetime date_pointage;
    	private int id_fournisseur;
     
    	/**
             * Constructeur avec une checkBox
             * @param checkBox
             * @param count
             */
    	public ButtonEditor(String bouton, JCheckBox checkBox) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.bouton=bouton;
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public ButtonEditor(Observable mod, String bouton, JCheckBox checkBox) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.model = (Model)mod;
    		this.bouton=bouton;
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public ButtonEditor(Observable mod, Membres membres, String bouton, JCheckBox checkBox) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.model = (Model)mod;
    		this.membres = membres;
    		this.bouton=bouton;
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public ButtonEditor(Observable mod, Membres membres, String bouton, JCheckBox checkBox, int id_fournisseur) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.model = (Model)mod;
    		this.membres = membres;
    		this.bouton=bouton;
    		this.id_fournisseur=id_fournisseur;
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public ButtonEditor(Observable mod, Membres membres, String bouton, JCheckBox checkBox, Tableau_operation_recettes_model table_model) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.model = (Model)mod;
    		this.table_model2=table_model;
    		this.membres = membres;
    		this.bouton=bouton;
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public ButtonEditor(Icon icon, String bouton,  JCheckBox checkBox) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		this.bouton="bouton";
    	    //On crée à nouveau notre bouton
    		button = new JButton(icon);
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    		// TODO Auto-generated constructor stub
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
    		//On définit le numéro de lignes à notre listener
    		bListener.setRow(row);
    		//Idem pour le numéro de colonnes
    		bListener.setColumn(column);
    		//On passe aussi le tableau pour des actions potentielles
    		bListener.setTable(table);
    		//On réaffecte le libellé au bouton
    		if(bouton=="pointage_compta"){
    			button.setText( (value ==null) ? "" : value.toString() );
    			Tableau_pointage_compta_model table_model = (Tableau_pointage_compta_model) table.getModel();
    			button.setEnabled(((table_model.getValueAt(row, 1, 1)=="non" && column==1) || value=="") ? false : true);
    		}
    		else if(bouton=="ajout_depense_recette_detail"){
    			button.setText( (value ==null) ? "" : value.toString() );
    			Tableau_depense_recette_model table_model = (Tableau_depense_recette_model) table.getModel();
    			button.setEnabled(((table_model.getValueAt(row, 1, 1)=="non" && column==1) || value=="") ? false : true);
    		}
    		else if(bouton=="ajout_depense_suppression" || bouton=="ajout_recette_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );
    		}
    		else if(bouton=="operation_recettes"){
    			button.setText( (value ==null) ? "" : value.toString() );
    		}
    		else if(bouton=="competitions"){
    			button.setText( (value ==null) ? "" : value.toString() );
    		}
    		else if(bouton=="articles_endose" || bouton=="articles_prix_de_vente" || bouton=="articles_affichage" || bouton=="articles_inventaire" || bouton=="articles_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="membres_affichage" || bouton=="membres_forfait" || bouton=="membres_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="correction_heures"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="fournisseur_affichage" || bouton=="fournisseur_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="filtres_frequent" || bouton=="filtres_affichage" || bouton=="filtres_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="approvisionnement_modifier"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="approvisionnement_supprimer"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="palier_heures_affichage" || bouton=="palier_heures_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="syntheses_compta_detail"){
    			Tableau_synthese_compta_model table_model = (Tableau_synthese_compta_model) table.getModel();
    			button.setText((value != null) ? value.toString() : "");
    			button.setEnabled(((Integer)table_model.getValueAt(row, column-1, 0)==0) ? false : true);
    		}
    		else if(bouton=="remise_suppression" || bouton=="retrait_suppression"){
    			Tableau_remise_retrait_especes_model table_model = (Tableau_remise_retrait_especes_model) table.getModel();
    			button.setText( (value ==null) ? "" : value.toString() );
    		}
    		else if(bouton=="remise_cheque_suppression" || bouton=="remise_de_cheque_detail"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="inventaire_caisse_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="operation_livret_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="dose_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );		
    		}
    		else if(bouton=="stock_inventaire_detail" || bouton=="stock_inventaire_suppression"){
    			button.setText( (value ==null) ? "" : value.toString() );
    		}
     
    		if(police!=null){
    			button.setFont(police);
    	    }
    		button.setMargin(new Insets(1, 1, 1, 1));
    		//On renvoie le bouton
    	    return button;
    	}
    	public void setPolice(Font police) {
    		// TODO Auto-generated method stub
    		this.police = police;
    	}
     
    	/**
             * Notre listener pour le bouton
             * @author  CHerby
             */
    	class ButtonListener implements ActionListener{
     
    		private int column;
    		private int row;
    		private JTable table;
    		private int nbre = 0;
    		private JButton button;
    		private Datetime date;
    		private boolean bugbutton=false;
    		public void setColumn(int col){this.column = col;}
    		public void setRow(int row){this.row = row;}
    		public void setTable(JTable table){this.table = table;}
    		public JButton getButton(){return this.button;}
     
    		public void actionPerformed(ActionEvent event) {
    			this.button = ((JButton)event.getSource());
    			if(bouton=="pointage_compta"){
    				DAO<Compta_banque> compta_banqueDao = new Compta_banqueDao();
    				Tableau_pointage_compta_model table_model = (Tableau_pointage_compta_model) table.getModel();
    				Datetime datetime= new Datetime((Date) table_model.getValueAt(row, 9, 1));
    				if(this.button.getText()=="Pointage"){
    					table_model.setValueAt(datetime.getDateAvecSlash(), 0, this.row, (this.column +1));
    					table_model.setValueAt("Dépointage", 0, row, column);
    					table_model.setValueAt(datetime.getDate_format(), 1, row, column);
    					//On affecte la date dans la bdd	
    					compta_banqueDao.update("check", "1", "check_mois", datetime.getDateTime2(), (Integer) table_model.getValueAt(row, 0, 1));
    					logger.info("Mise a jour de compta_banque, on affecte la date de pointage");
    					this.button.setText("Dépointage");
    				}
    				else if(this.button.getText()=="Dépointage"){
    					//On supprime la date dans le tableau
    					table_model.setValueAt("", 0, this.row, (this.column +1));
    					table_model.setValueAt("Pointage", 0, row, column);
    					table_model.setValueAt(datetime.getDate_format(), 1, row, column);
    					//On dé-check la date dans la bdd
    					compta_banqueDao.update("check", "0", (Integer) table_model.getValueAt(row, 0, 1));
    					logger.info("Mise a jour de compta_banque, on dépointe!");
    					this.button.setText("Pointage");
    				}
    				bugbutton=true;
    			}
    			((AbstractTableModel)table.getModel()).fireTableDataChanged();// On met a tout a jour
    			if(bugbutton){
    				table.selectAll();
    				table.clearSelection();
    			}
    		}
    	}
    }
    J'ai supprimer pas mal de ligne dans l'editor car la classe fait 1186 lignes.
    L'action du bouton pointage fonctionne avec le code ci-dessus.


  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Commence par créer un petit couple renderer/editor tout con qui reproduit ton problème.

    Si tu n'y arrives pas, c'est juste que ton énorme de tartine de code imbittable et anti pattern fout la merde(tous, ces if/else j'en ai des frissons... Tout ça pour faire quasiment les mêmes opérations... Franchement pas ragoutant et prop.

    Dans ton cas il serait de bon aloi de repenser tes renderers et editors. Ceux ci sont censés porté le minimum de logique possible et se concentrer sur deux choses: l'aspect et éventuellement la validation pour l'editor si tu as directement besoin de validation lors de la saisie...

    Le reste de ton code a plutôt sa place dans un controller.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. Bug affichage Jpanel (contenant JButton) dans une JTable
    Par Ayok13 dans le forum Composants
    Réponses: 3
    Dernier message: 20/11/2011, 04h46
  2. Listen un JButton dans une JTable
    Par Goupo dans le forum Composants
    Réponses: 1
    Dernier message: 14/03/2008, 03h21
  3. Utilsation des JButton dans une Jtable
    Par henpower dans le forum Composants
    Réponses: 4
    Dernier message: 18/09/2007, 16h58
  4. Comment mettre un JButton dans une JTable
    Par vinceLeBarbare dans le forum Composants
    Réponses: 6
    Dernier message: 05/06/2006, 11h43
  5. Icon pour pour JButton dans une Jtable + pb colonnes
    Par dim_italia dans le forum Composants
    Réponses: 3
    Dernier message: 22/02/2006, 18h05

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