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

JavaFX Discussion :

JavaFX - Appelé depuis une sous-classe, Setter de Stage primaryStage ne fonctionne pas


Sujet :

JavaFX

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut JavaFX - Appelé depuis une sous-classe, Setter de Stage primaryStage ne fonctionne pas
    Bonjour,

    J'ai un problème dont je pense que vous pourriez m'aider.
    Pour aller droit au but, je vais déjà publier un peu de code.

    Master Class
    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
     
    public class MASTERCLASS extends Application {
     
        private screenLoader screenLoader;
        private static screenMenu screenMenu;
     
        private static Stage window;
     
        @Override
        public void start(Stage primaryStage) throws Exception{
            setWindow(primaryStage);
     
            setScreenLoader(new screenLoader());
            setScreenMenu(new screenMenu());
     
            /** AFFICHAGE DE LA FENETRE **/
            getScreenLoader().displayWindow();
     
            [...]
        }
     
        public Parent loadingContent(String url) {
            try {
                FXMLLoader loader = new FXMLLoader();
                Parent root = loader.load(getClass().getResource(url));
                return (root);
            }
            catch (IOException e) {
                e.printStackTrace();
                return (null);
            }
        }
     
        public Scene createContent(Parent root) {
            Scene scene = new Scene(root);
     
            String css = getClass().getResource("../css/defaultStyle.css").toExternalForm();
            scene.getStylesheets().clear();
            scene.getStylesheets().add(css);
     
            return (scene);
        }
     
        public static Stage getWindow() { return window; }
        public static void setWindow(Stage window) { MuffinAttack.window = window; }
     
        public screenLoader getScreenLoader() { return screenLoader; }
        public void setScreenLoader(screenLoader screenLoader) { this.screenLoader = screenLoader; }
     
        public static screenMenu getScreenMenu() { return screenMenu; }
        public static void setScreenMenu(screenMenu screenMenu) { MuffinAttack.screenMenu = screenMenu; }
     
    }

    Fichier contenant ScreenLoader
    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
     
    public class screenLoader extends MASTERCLASS {
     
        private Line loaderBar = new Line();
        private Line loaderBar2 = new Line();
        private ResourceLoadingTask task = new ResourceLoadingTask();
        private int textWidth = 200;
     
        private Parent loadingContent() {
            Pane root = new Pane();
            root.setPrefSize(800, 600);
     
            Text copyright = new Text();
            copyright.setFont(new Font(12));
            copyright.setTextAlignment(TextAlignment.CENTER);
            copyright.setWrappingWidth(textWidth);
            copyright.setX((800 / 2) - (textWidth / 2));
            copyright.setY(600 - 5);
            copyright.setText("Copyright BLA BLA BLA");
     
            LoadingCircle loadingCircle = new LoadingCircle();
            loadingCircle.setTranslateX(800 - 120);
            loadingCircle.setTranslateY(600 - 100);
     
            Rectangle loadingBarBG = new Rectangle(100, 600 - 70, 800 - 200, 5);
            loadingBarBG.setFill(Color.DARKGREY);
            loadingBarBG.setStroke(Color.BLUE);
     
            loaderBar.setStartX(100);
            loaderBar.setStartY(600 - 70);
            loaderBar.setEndX(100);
            loaderBar.setEndY(600 - 70);
            loaderBar.setStroke(Color.AZURE);
     
            loaderBar2.setStartX(100);
            loaderBar2.setStartY(600 - 65);
            loaderBar2.setEndX(100);
            loaderBar2.setEndY(600 - 65);
            loaderBar2.setStroke(Color.AZURE);
     
            task.progressProperty().addListener((observable, oldValue, newValue) -> {
                double progress = newValue.doubleValue();
                loaderBar.setEndX(100 + progress * (800 - 200));
                loaderBar2.setEndX(100 + progress * (800 - 200));
            });
     
            root.getChildren().addAll(copyright, loadingCircle, loadingBarBG, loaderBar, loaderBar2);
            return (root);
        }
     
        private RotateTransition animation;
     
        class LoadingCircle extends Parent {
     
            private LoadingCircle() {
                Circle circle = new Circle(20);
                circle.setFill(null);
                circle.setStroke(Color.WHITE);
                circle.setStrokeWidth(5);
     
                Rectangle rect = new Rectangle(25, 25);
     
                Shape shape = Shape.subtract(circle, rect);
                shape.setFill(Color.DARKGREY);
                shape.setStroke(Color.DARKGREY);
     
                getChildren().add(shape);
     
                animation = new RotateTransition(Duration.seconds(2.5), this);
                animation.setByAngle(360);
                animation.setInterpolator(Interpolator.LINEAR);
                animation.setCycleCount(Animation.INDEFINITE);
                animation.play();
            }
        }
     
        class ResourceLoadingTask extends Task<Void> {
     
            @Override
            protected Void call() throws Exception {
     
                for (int i = 0; i < 100; i++) {
                    Thread.sleep((int)(Math.random() * 100));
                    updateProgress(i + 1, 100);
                }
                animation.stop();
                // /!\
                // C'EST ICI QUE JE VEUX DE L'AIDE
                getScreenMenu().displayWindow(); // AUCUNE ERREUR REMARQUÉE PAR L'IDE, RIEN NE S'AFFICHE
                // /!\
                return (null);
            }
        }
     
        public void displayWindow() throws InterruptedException {
            System.out.println("YOLO I AM TEST - YOUR FATHER!");
            getWindow().setTitle("JE SUIS : Loader");
     
            getWindow().setScene(createContent(this.loadingContent()));
     
            getWindow().setResizable(false);
            getWindow().sizeToScene();
     
            getWindow().show();
     
            Thread t = new Thread(task);
            t.start();
        }
    }
    Fichier contenant ScreenMenu
    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
     
    public class screenMenu extends MASTERCLASS {
     
        public void displayWindow() {
            getWindow().setTitle("JE SUIS - Menu");
     
            getWindow().setScene(createContent(loadingContent("../_view/viewMenu.fxml")));
     
            getWindow().setResizable(false);
            getWindow().sizeToScene();
     
            getWindow().show();
     
        }
    }
    Voilà en gros mon code...

    Je n'arrive pas à changer de Scene.
    Et lorsque j'instancie dans la sous-classe, je ne peux pas utiliser le Setter de getWindow().setTitle("..."), [...].setScene(data), etc.

    Merci de bien vouloir m'aider...

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 858
    Points
    22 858
    Billets dans le blog
    51
    Par défaut
    Hum... alors :

    1. Faudrait penser a respecter les conversions de nommage Java.
    2. Mais pourquoi diable as-tu 3 applications alors que seule la classe principale a besoin d’hériter d'Application ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je serrai heureux d'apprendre comment faire pour mieux respecter les 'conversions de nommage Java'.

    Et bien entendu, la classe principale est la seule classe héritant de l'extend 'Application'.
    La classe principale est le centre de mon code. Initialisant toutes les Classes du code, et gérant l'affichage des contenus dans la public static Stage window.

    Comment auriez-vous procédez l'affichage de la Scene screenLoader sans intégrer le code source dans la classe principale ?

    P.S : mon code serrait trop long et incompréhensible si j'inclue tout le code dans un seul fichier.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 858
    Points
    22 858
    Billets dans le blog
    51
    Par défaut
    Quelles sont les convention de nommage en Java ?

    En étendant Stage justement et non pas ta classe MASTERCLASS qui te sert d'Application.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je vous remercie pour le lien concernant la norme de syntaxe.

    Cependant, concernant la résolution du problème... Que voulez-vous dire par étendre mon 'Stage', et non pas la classe?

    Je voudrais déclarer 'Stage' une seule fois, et intégrer du contenus au travers de 'Scene' multiples...
    Comment visionnez-vous la résolution du problème ?

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 858
    Points
    22 858
    Billets dans le blog
    51
    Par défaut
    Reprenons, pour ce qu'on peut en juger le code donne contient :

    • Une application, la classe MASTERCLASS qui hérite de Application.
    • Un écran de chargement de ressources, la classe screenLoader. Pour une raison bizarre quelconque, cette classe hérite de MASTERCLASS
    • Une classe screenMenu dont on ne sait pas trop quel est son but. Cette classe hérite aussi de MASTERCLASS


    Tu as donc 3 points de lancement potentiels dans ton application, or le launcher JavaFX ne va en utiliser qu'un seul et de lui-même créer une instance de la classe a lancer (qui est MASTERCLASS si je ne m'abuse, sinon laquelle ?).
    Dans ton application tu as besoin d'avoir uniquement une Application pas 36.
    Les autres classes sont soient des Window, Stage, Dialog , etc. ou encore des Node, Region, layouts ou autres contrôles pour tout ce qui est des classes UI ou des classes non-graphiques, modélisant des données ou utilitaires pour ce qui est de la partie non-UI.

    Après pour ce qui est de la réutilisation des composants, ben si on ne veut pas avoir des fenêtres mais plutôt des composants inscrutables, on définit des Node, Region, layouts ou autres contrôles et ça permet soit de les incruster dans des fenêtres ou des dialogues soit de les inclure dans une sous-partie de l'UI. Après, on peut aussi inclure des méthodes utilitaire pour afficher des boites de dialogue automatiquement (ex: showDialog() qu'on trouve dans pas mal de contrôles de l'API). Clairement, screenLoader semble être un bon candidat pour une telle transformation.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour l'information.
    J'ai finalement compris que mon code était mal organisé, mal structuré, et digne d'être embrassé par un "rm -Rf"...
    Enfin bref, j'ai compris qu'il était inutile pour moi de faire un setTitle deux fois de suite, car la méthode était constante (final).

    J'ai donc dû procéder à une autre méthode pour changer de pages... Initialisé le tout, puis afficher une page à la fois.

    J'ai fais les modifications nécessaires, et j'ai pu afficher les pages dont je voulais en passant par une interface.

    J'ai dû comprendre comment optimiser mon code pour que les pages soient tous initialisées sans causer de problèmes au niveau du processeur : toutes les pages initialisées, mais affiché une à la fois.

    FONCTION PRINCIPALE
    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
     
                [...]
                public static String screenMenuId = "menu";
                public static String screenMenuVue = "view/ScreenMenuView.fxml";
                [...]
                private static int[] resolution = new int[]{800,600};
     
                ScreensController mainScreenContainer = new ScreensController();
                mainScreenContainer.loadScreen(this.screenLoaderId, this.screenLoaderVue, getResolution());
                mainScreenContainer.loadScreen(this.screenMenuId, this.screenMenuVue, getResolution());
                mainScreenContainer.loadScreen(this.screenGameId, this.screenGameVue, getResolution());
                mainScreenContainer.loadScreen(this.screenOptionsId, this.screenOptionsVue, getResolution());
                mainScreenContainer.loadScreen(this.screenBonusId, this.screenBonusVue, getResolution());
     
                mainScreenContainer.setScreen(this.screenLoaderId);
     
                Group root = new Group();
                root.getChildren().addAll(mainScreenContainer);
     
                Scene scene = new Scene(root, 800, 600);
     
                getWindow().setTitle("Game Project - WIP");
                getWindow().setScene(scene);
     
                getWindow().setResizable(false);
                getWindow().sizeToScene();
     
                getWindow().show();
    ScreensController
    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
     
    public class ScreensController extends StackPane {
        private HashMap<String, Node> screens = new HashMap<>();
     
        public ScreensController() {
            super();
        }
     
        public void addScreen(String name, Node screen) {
            this.screens.put(name, screen);
        }
     
        public Node getScreen(String name) {
            Node node = screens.get(name);
            return (node);
        }
     
        public Boolean loadScreen(String name, String resource, int[] resolution) {
            try {
                FXMLLoader currentLoader = new FXMLLoader(getClass().getResource(resource));
                AnchorPane anchorPane = (AnchorPane) currentLoader.load();
                anchorPane.setPrefSize(resolution[0], resolution[1]); // IMPORTANT /!\ It sets the Screen Resolution
                Parent loadScreen = (Parent) anchorPane;
                ControlledScreen currentScreenController = ((ControlledScreen) currentLoader.getController());
                currentScreenController.setScreenParent(this);
                addScreen(name, loadScreen);
                return (true);
            } catch (Exception e) {
                System.out.println(e.getMessage());
                return (false);
            }
        }
     
        public Boolean setScreen(final String name) {
            if (getScreen(name) != null) {
                final DoubleProperty opacity = opacityProperty();
                //final ObjectProperty<Color> baseColor = new SimpleObjectProperty<>();
     
                if (!getChildren().isEmpty()) {
                    Timeline fade = new Timeline(
                            new KeyFrame(Duration.ZERO, new KeyValue(opacity, 1.0)),
                            new KeyFrame(new Duration(500), new EventHandler<ActionEvent>() {
                                @Override
                                public void handle(ActionEvent event) {
                                    getChildren().remove(0);
                                    getChildren().add(0, getScreen(name));
                                    Timeline fadeIn = new Timeline(
                                            new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                                            new KeyFrame(new Duration(500), new KeyValue(opacity, 1.0))
                                    );
                                    fadeIn.play();
                                }
                            }, new KeyValue(opacity, 0.0))
                    );
                    fade.play();
                }
     
                else {
                    setOpacity(0.0);
                    getChildren().add(getScreen(name));
     
                    Timeline fadeIn = new Timeline(
                            new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                            new KeyFrame(new Duration(800), new KeyValue(opacity, 1.0))
                    );
                    fadeIn.play();
                }
                return (true);
            }
            else {
                System.out.println("Screen Has Not Been Loaded");
                return (false);
            }
        }
    }
    ControlledScreen
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface ControlledScreen {
        void setScreenParent(ScreensController screenParent);
    }
    ScreeMenuController
    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
     
    public class ScreenMenuController implements Initializable, ControlledScreen {
     
        ScreensController currentController;
     
        @FXML
        private AnchorPane root_menu;
        @FXML
        private Button game;
        @FXML
        private Button options;
        @FXML
        private Button bonus;
        @FXML
        private Button exit;
     
        @Override
        public void initialize(URL location, ResourceBundle resources) {
            ScreenMenuModel screenMenuModel = new ScreenMenuModel();
        }
     
        @Override
        public void setScreenParent(ScreensController screenParent) {
            this.currentController = screenParent;
        }
     
        @FXML
        private void goToGame(ActionEvent event) { currentController.setScreen("game"); }
        @FXML
        private void goToOptions(ActionEvent event) {
            currentController.setScreen("options");
        }
        @FXML
        private void goToBonus(ActionEvent event) {
            currentController.setScreen("bonus");
        }
        @FXML
        private void goToExit() {
            Platform.exit();
            System.exit(0);
        }
    }
    Je pense que je n'ai plus besoin d'aides pour appeler une classe parent. Entre autre, que je vais fermer ce post et le considérer comme résolu.
    Par contre, j'aurais besoin d'autres aides.
    Et si je ne trouve pas les posts répondant à mes questions, je vais tout simplement en créer un.

    Merci encore.

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 858
    Points
    22 858
    Billets dans le blog
    51
    Par défaut
    C'est la démarche normale à suivre
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Appel d'une méthode depuis une autre classe
    Par anonymous123 dans le forum Général Java
    Réponses: 1
    Dernier message: 18/07/2012, 16h22
  2. Réponses: 8
    Dernier message: 05/07/2011, 11h51
  3. Comment appeler une méthode public depuis une autre class
    Par Gregi dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 01/03/2010, 10h08
  4. Réponses: 7
    Dernier message: 24/09/2008, 11h18
  5. GC appel depuis une autre classe
    Par dark2 dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 09/06/2006, 05h53

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