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 :

Ouvrir une fenêtre à l'appui sur un bouton


Sujet :

JavaFX

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 30
    Points : 30
    Points
    30
    Par défaut Ouvrir une fenêtre à l'appui sur un bouton
    Bonjour à tous,

    J'aimerai effectué lorsque j'appuie sur un bouton (Button()) l'action de m'ouvrir une autre IHM (dans une classe à coté) tout en fermant la fenêtre.

    Dans la suite de mon explication je n'ai pas mis d'import mais il y sont !

    Dans mon projet j'ai un package IHM :

    Nom : Capture.PNG
Affichages : 1715
Taille : 13,5 Ko


    mon MainIHM est la classe 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    public class MainIHM extends Application{
     
        @Override
        public void start(Stage stage) throws Exception {
     
            Group root = new Group();
     
            Scene scene = new Scene(root, 600, 500);       
            stage.setResizable(false);//empecher d'agrandir ou de réduire la fenêtre ainsi que de la resize comme on le veut
     
            //scene.setFill(Color.RED);
     
            //Text text = new Text(10, 30, "Hello World!");
            //root.getChildren().add(text);
     
     
            ClientAuth ca = new ClientAuth();
            root.getChildren().add(ca);  
            stage.setTitle("Sign in");
            scene.setFill(Color.ALICEBLUE);
            stage.setScene(scene);
            stage.show();    
     
     
            //si le bouton créer un compte est appuyé
            //ClientAccount cac = new ClientAccount();
           // root.getChildren().add(cac);
     
            //stage.setTitle("Sign up");
            //scene.setFill(Color.ALICEBLUE);
            //stage.setScene(scene);
            //stage.show();  
     
     
            //if connecté
            //ClientPanel cp = new ClientPanel();
            //root.getChildren().add(cp);
     
            //stage.setHeight(500);
            //stage.setWidth(600);
           // stage.setTitle("Messagerie");
     
            //stage.setScene(scene);
            //stage.show();    
        } 
        public static void main(String[] args) {
            Application.launch(MainIHM.class, args);
     
        }
    }
    Vous voyez qu'ici j'ai mis en commentaires les fenêtres ClientAccount et ClientPanel qui ne s'ouvriront donc pas car pour le moment étant donner que je n'est pas réussi à les séparer lorsque je lance mon programme ces 3 fenêtres que j'aimerai distinguer l'une de l'autre sont pour le moment regrouper en une seul et ce n'est pas ce que je souhaite.

    J'ouvre ici en premier temps l'IHM ClientAuth (IHM d'authentification par un utilisateur)

    La classe ClientAuth = (extend de Parent car j'utilise JavaFx)

    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
     
    public class ClientAuth extends Parent{
     
        private TextField textToSendNdc;// Zone de texte permettant de saisir le nom de compte
        private PasswordField textToSendMdp;
        private Button sendBtn;
        private Button sendCompte;
        private Text textWelcome;
        private Text textConnection;
        private Text textPseudo;
        private Text textPassword;
        private Text textCompte;
     
        final Font times30BoldItalicFont = Font.font("arial", FontWeight.BOLD, FontPosture.ITALIC, 30);
        final Font times20ItalicFont = Font.font("arial", FontPosture.ITALIC, 20);
        final Font times15ItalicFont = Font.font("arial", FontPosture.ITALIC, 15);
     
        public ClientAuth(){
     
            textWelcome = new Text();
            textWelcome.setText("Bienvenue sur l'IRC");
            textWelcome.setLayoutX(175);
            textWelcome.setLayoutY(80);
            textWelcome.setFont(times30BoldItalicFont);
     
            textConnection = new Text();
            textConnection.setText("Connectez-vous :");
            textConnection.setLayoutX(225);
            textConnection.setLayoutY(130);
            textConnection.setFont(times20ItalicFont);
     
            textPseudo = new Text();
            textPseudo.setText("Nom de compte :");
            textPseudo.setLayoutX(150);
            textPseudo.setLayoutY(185);
            textPseudo.setFont(times15ItalicFont);
     
            textPassword= new Text();
            textPassword.setText("Mot de passe :");
            textPassword.setLayoutX(150);
            textPassword.setLayoutY(275);
            textPassword.setFont(times15ItalicFont);
     
            textToSendNdc = new TextField();
            textToSendNdc.setLayoutX(150);
            textToSendNdc.setLayoutY(190);
            textToSendNdc.setPrefHeight(10);
            textToSendNdc.setPrefWidth(300);
            textToSendNdc.setEditable(true);
            textToSendNdc.clear();
     
            textToSendMdp = new PasswordField();
            textToSendMdp.setLayoutX(150);
            textToSendMdp.setLayoutY(280);
            textToSendMdp.setPrefHeight(10);
            textToSendMdp.setPrefWidth(300);
            textToSendMdp.setEditable(true);
            textToSendMdp.clear();
     
            sendBtn= new Button();
            sendBtn.setText("Connexion");
            sendBtn.setLayoutX(250);
            sendBtn.setLayoutY(330);
            sendBtn.setPrefWidth(100);
            sendBtn.setPrefHeight(50);
            sendBtn.setVisible(true);
            sendBtn.setTextFill(Color.DARKGREEN);
     
     
           /* sendBtn.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent event) {
                    Label label = new Label();
                    if (textToSend.getText().isEmpty() ){
                    } else { 
                        label.setText(textToSend.getText()+"\n");
                        label.setPrefWidth(400);
     
                        receivedText.getChildren().add(label);
                        textToSend.setText("");
                      }                         
                
            });*/
     
            sendCompte= new Button();
            sendCompte.setText("Créer un compte");
            sendCompte.setLayoutX(230);
            sendCompte.setLayoutY(430);
            sendCompte.setPrefWidth(140);
            sendCompte.setPrefHeight(40);
            sendCompte.setVisible(true);
            sendCompte.setTextFill(Color.DARKCYAN);
            sendCompte.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent event) {
     
     
                        //si le bouton créer un compte est appuyé
                         ClientAccount cac = new ClientAccount();
     
                                 }       
            });
     
     
     
     
           /* sendBtn.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent event) {
                    Label label = new Label();
                    if (textToSend.getText().isEmpty() ){
                    } else { 
                        label.setText(textToSend.getText()+"\n");
                        label.setPrefWidth(400);
     
                        receivedText.getChildren().add(label);
                        textToSend.setText("");
                      }                         
                
            });*/
     
            textCompte = new Text();
            textCompte.setText("ou");
            textCompte.setLayoutX(290);
            textCompte.setLayoutY(420);
            textCompte.setFont(times15ItalicFont);
     
            this.getChildren().add(textToSendNdc);
            this.getChildren().add(textToSendMdp);
            this.getChildren().add(textWelcome);
            this.getChildren().add(textConnection);
            this.getChildren().add(textPseudo);
            this.getChildren().add(textPassword);
            this.getChildren().add(sendBtn);
            this.getChildren().add(textCompte);
            this.getChildren().add(sendCompte);
        }  
    }
    Je définie mes boutons, je réalise mon interface tous se passe bien, mais je bloque ici car j'aimerai faire en sorte d'ouvrir ClientAccout mon IHM de création de compte lorsque je clique sur le bouton "Créer un compte".

    La classe que je souhaite ouvrir : ClientAccount() dans l'évenement de l'appuie sur le bouton de création de compte de la classe ClientAuth().

    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
     
    public class ClientAccount extends Parent{
     
        private TextField textToSendNdc;// Zone de texte permettant de saisir le nom de compte
        private PasswordField  textToSendMdp;
        private PasswordField textToSendMdpRepeat;
        private Button sendBtn;
        private Button sendCompte;
        private Text textWelcome;
        private Text textPseudo;
        private Text textPassword;
        private Text textRepeatPassword;
        private Text textCompte;
     
        final Font times30BoldItalicFont = Font.font("arial", FontWeight.BOLD, FontPosture.ITALIC, 30);
        final Font times20ItalicFont = Font.font("arial", FontPosture.ITALIC, 20);
        final Font times15ItalicFont = Font.font("arial", FontPosture.ITALIC, 15);
     
        public ClientAccount(){
     
            textWelcome = new Text();
            textWelcome.setText("Création de votre compte :");
            textWelcome.setLayoutX(130);
            textWelcome.setLayoutY(60);
            textWelcome.setFont(times30BoldItalicFont);
     
            textPseudo = new Text();
            textPseudo.setText("Saisir un pseudo :");
            textPseudo.setLayoutX(150);
            textPseudo.setLayoutY(145);
            textPseudo.setFont(times15ItalicFont);
     
            textPassword= new Text();
            textPassword.setText("Saisir un mot de passe :");
            textPassword.setLayoutX(150);
            textPassword.setLayoutY(230);
            textPassword.setFont(times15ItalicFont);
     
            textRepeatPassword= new Text();
            textRepeatPassword.setText("Retapez le mot de passe :");
            textRepeatPassword.setLayoutX(150);
            textRepeatPassword.setLayoutY(280);
            textRepeatPassword.setFont(times15ItalicFont);
     
            textToSendNdc = new TextField();
            textToSendNdc.setLayoutX(150);
            textToSendNdc.setLayoutY(150);
            textToSendNdc.setPrefHeight(10);
            textToSendNdc.setPrefWidth(300);
            textToSendNdc.setEditable(true);
            textToSendNdc.clear();
            textToSendNdc.selectionProperty().addListener(observable -> System.out.println("Sélection modifiée dans le champ d'édition !"));
            textToSendNdc.copy();
     
     
            //textToSendNdc.setDocument(new TStringField(10));
     
     
            TextFormatter<?> integerOnlyFormatter = null;
            textToSendNdc.setTextFormatter(integerOnlyFormatter); /*le filtrage des modifications apportées au contenu du contrôle de saisie (
               ex. : éviter la saisie de certains caractères); convertir le texte saisi dans le contrôle par l'utilisateur en une valeur de type V 
               qui sera contenue dans la propriété value du formateur. Dans le cas où le programmeur modifie la propriété value du formateur, 
               celui-ci convertira alors la valeur en texte à afficher dans le contrôle de saisie.*/
     /* final UnaryOperator<TextFormatter.Change> integerOnlyFilter = change -> { 
        final String text = change.getText(); 
        return (text.isEmpty() || text .matches("[0-9]")) ? change : null; 
    }; 
    final TextFormatter<Integer> integerOnlyFormatter = new TextFormatter(integerOnlyFilter);*/
            textToSendMdp = new PasswordField();
            textToSendMdp.setLayoutX(150);
            textToSendMdp.setLayoutY(235);
            textToSendMdp.setPrefHeight(10);
            textToSendMdp.setPrefWidth(300);
            textToSendMdp.setEditable(true);
            textToSendMdp.clear();
     
            final PasswordField passwordField = new PasswordField(); 
            passwordField.setPromptText("Mot de passe"); 
            passwordField.setOnAction(new EventHandler<ActionEvent>() { 
            @Override 
            public void handle(ActionEvent e) { 
            // Validation du mot de passe. 
            // Réaction en cas de mot de passe valide. 
            // Réaction en cas de mot de passe non valide. 
            passwordField.clear(); 
        } 
     
    });
     
            textToSendMdpRepeat = new PasswordField();
            textToSendMdpRepeat.setLayoutX(150);
            textToSendMdpRepeat.setLayoutY(285);
            textToSendMdpRepeat.setPrefHeight(10);
            textToSendMdpRepeat.setPrefWidth(300);
            textToSendMdpRepeat.setEditable(true);
            textToSendMdpRepeat.clear();
     
            sendBtn= new Button();
            sendBtn.setText("Création du compte");
            sendBtn.setLayoutX(150);
            sendBtn.setLayoutY(350);
            sendBtn.setPrefWidth(140);
            sendBtn.setPrefHeight(50);
            sendBtn.setVisible(true);
            sendBtn.setTextFill(Color.DARKGREEN);
            sendBtn.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent event) {
                    System.out.println("test");            
                }       
            });
     
            sendCompte = new Button();
            sendCompte.setText("Menu connexion");
            sendCompte.setLayoutX(310);
            sendCompte.setLayoutY(350);
            sendCompte.setPrefWidth(140);
            sendCompte.setPrefHeight(50);
            sendCompte.setVisible(true);
            sendCompte.setTextFill(Color.DARKCYAN);
     
           /* sendBtn.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent event) {
                    Label label = new Label();
                    if (textToSend.getText().isEmpty() ){
                    } else { 
                        label.setText(textToSend.getText()+"\n");
                        label.setPrefWidth(400);
     
                        receivedText.getChildren().add(label);
                        textToSend.setText("");
                      }                         
                
            });*/    
            this.getChildren().add(textToSendNdc);
            this.getChildren().add(textToSendMdp);
            this.getChildren().add(textToSendMdpRepeat);
            this.getChildren().add(textWelcome);
            this.getChildren().add(textPseudo);
            this.getChildren().add(textPassword);
            this.getChildren().add(textRepeatPassword);
            this.getChildren().add(sendBtn);
            this.getChildren().add(sendCompte);
        }  
    }
    Voilà j'ai fournie toutes les classes, ClientPanel n'est pas nécessaire.

    Pour résoudre mon problème j'avai penser à ajouter un if dans le mainIHM est ne lancer le ClientAccout que si le bouton de ClientAuth est appuyé, mais je ne sais pas si c'est faisable en Java le fait d'appeler un bouton défini dans une méthode d'une autre classe(ClientAuth) (qui plus est pour appeler une méthode d'une autre classe(ClientAccount)).

    Ne sachant pas si c'était faisable, je suis passer sur la solution classique, c'est à dire agir sur l'ActionEvent du bouton

    sendCompte.setOnAction(new EventHandler<ActionEvent>(){
    @Override
    public void handle(ActionEvent event) {}


    J'ai commencer à ajouter l'appel a la classe ClientAccout() mais la encore j'ai bloqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     ClientAccount cac = new ClientAccount();
     
           root.getChildren().add(cac);
     
            stage.setTitle("Sign up");
     
            scene.setFill(Color.ALICEBLUE);
     
            stage.setScene(scene);
     
            stage.show();
    Je ne peut pas utiliser le paramètre stage qui est défini comme attribut Stage stage dans la création de la méthode de la classe MainIHM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void start(Stage stage) throws Exception {
    Puis si j'implémente comme sa dans mon ActionEvent je ne créer pas la scene car elle se créer au début du MainIHM mais pour le premier IHM pas pour le second.

    Bref je suis complétement bloquer, je sais qu'il y a une solution mais je ne sais pas comment faire. Pouvez vous m'aider ?:p Merci beaucoup, vraiment merci d'avance.

    Je rappel que l'utilisation de JavaFX est une contrainte dans mon projet, merci si possible de me donner une solution sans contourner JavaFx.

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Andorre

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2014
    Messages : 26
    Points : 69
    Points
    69
    Par défaut
    Salut, je n'ai pas lu en détail ton post (assez long), je mets ici la façon dont j'ouvre une fenêtre modale à partir de l'action d'un menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    final FXMLLoader oLoader = new FXMLLoader(getClass().getResource("/fxml/getpatch.fxml"));
    final GetpatchController oGetpatchController = springConfig.getpatchController();
    oLoader.setController(oGetpatchController);
    final Parent root = (Parent) oLoader.load();
    final Stage oStage = new Stage();
    oStage.initModality(Modality.APPLICATION_MODAL);
    oStage.setScene(new Scene(root));
    oGetpatchController.setStage(oStage);
    oStage.show();
    Si ça t'inspire...

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/04/2014, 22h19
  2. Fermer une fenêtre en cliquant sur un bouton
    Par darkterreur dans le forum jQuery
    Réponses: 6
    Dernier message: 28/06/2012, 14h47
  3. [Flex4] Ouvrir une nouvelle fenetre clique sur un bouton
    Par xclue dans le forum Flex
    Réponses: 4
    Dernier message: 23/12/2010, 15h23
  4. Ouvrir une fenêtre en cliquant sur un bouton
    Par Versace31 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 10/02/2009, 21h43
  5. Ouvrir une fenêtre à l'aide d'un bouton
    Par coco38 dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 25/04/2008, 15h27

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