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 : 1911
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.