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

Agents de placement/Fenêtres Java Discussion :

Mécanisme pour changer de fenêtre


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Mécanisme pour changer de fenêtre
    Bonjour,

    Je suis un débutant en programmation Java, j'ai appris à construire des fenêtres avec des JFrame, JPanel, JButton, etc. Le problème est que je n'arrive pas à comprendre la meilleure façon de construire mon code pour qu'au lancement de mon programme, une première fenetre (une fenêtre d'intro) s'affiche où l'utilisateur remplit le nom des deux joueurs ainsi qu'un choix parmi une liste de propositions, il appuie ensuite sur un bouton "Valider" et j'aimerais que ça me lance la construction de la 2e fenêtre (qui est la fenêtre principale de mon programme).

    J'ai essayé plusieurs manières d'organiser mon code, mais ça ne donne pas ce que je veux. Pour le moment j'en suis la, j'ai tout réuni dans une même classe, je ne sais pas si c'est le plus simple. Au début, j'avais une classe Fenêtre1 puis une classe Fenêtre2 avec un constructeur dans chaque classe mais le bouton "Valider" ne déclanchait rien non plus

    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
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.BorderLayout;
     
    public class Fenetre1 implements ActionListener {
     
    	//Déclaration de tous les champs de la Fenetre 1
    	JPanel questionnaire = new JPanel();
    	JLabel phraseNomJoueur1 = new JLabel("Entrez le nom du joueur 1 :");
    	JTextField nomJoueur1 = new JTextField(30);
    	JLabel phraseNomJoueur2 = new JLabel("Entrez le nom du joueur 2 :");
    	JTextField nomJoueur2 = new JTextField(30);
    	JLabel phraseFormatMatch = new JLabel("Quel est le format du match ?");
    	String format[] = {"Format 1 (3 sets classiques)",
    						"Format 2 (2 sets puis super tie break)",
    						"Format 4 (2 sets avec no-ad puis super tie break)"};
    	JComboBox choixFormatMatch = new JComboBox(format);
    	JButton valider = new JButton("Valider");
     
    	//Constructeur de la Fenetre 1
    	Fenetre1() {
    		BorderLayout panneauGlobal = new BorderLayout();
    	    questionnaire.setLayout(panneauGlobal);
    	    GridLayout disposition = new GridLayout(7,1); 
    	    questionnaire.setLayout(disposition);
     
    	    questionnaire.add(phraseNomJoueur1);
    	    questionnaire.add(nomJoueur1);
    	    questionnaire.add(phraseNomJoueur2);
    	    questionnaire.add(nomJoueur2);
    	    questionnaire.add(phraseFormatMatch);
    	    questionnaire.add(choixFormatMatch);
    	    questionnaire.add(valider);
     
    	    JFrame frame = new JFrame("Paramètres du match");
    	    frame.setContentPane(questionnaire);
    	    frame.pack();
    	    frame.setVisible(true);
     
    	    valider.addActionListener(this);
    	}
     
     
    			public void actionPerformed(ActionEvent événement) {
    				new Fenetre2();
    			}
     
    			// Déclaration des champs de la Fenetre 2
    			JPanel tableauGlobal = new JPanel();
    			JLabel champVide = new JLabel(" ");
    			JLabel scoreJeu = new JLabel("Jeu", SwingConstants.CENTER);
    			JLabel setEnCours = new JLabel("Set En Cours", SwingConstants.CENTER);
    			JLabel set1 = new JLabel("Set 1", SwingConstants.CENTER);
    			JLabel set2 = new JLabel("Set 2", SwingConstants.CENTER);
    			JLabel set3 = new JLabel("Set 3", SwingConstants.CENTER);
    			JLabel affichageNomJoueur1 = new JLabel("" + nomJoueur1.getText(), SwingConstants.CENTER);
    			JLabel scoreJeuJoueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSetEnCoursJoueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet1Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet2Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet3Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel affichageNomJoueur2 = new JLabel("" + nomJoueur2.getText(), SwingConstants.CENTER);
    			JLabel scoreJeuJoueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSetEnCoursJoueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet1Joueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet2Joueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet3Joueur2 = new JLabel("0", SwingConstants.CENTER);
     
    		    JButton plusJoueur1 = new JButton("+");
    		    JButton plusJoueur2 = new JButton("+");
    		    JButton moinsJoueur1 = new JButton("-");
    		    JButton moinsJoueur2 = new JButton("-");
     
                    //Constructeur de la Fenetre 2
    		void Fenetre2() {
    				// Crée le panneau global de la fenêtre
    				BorderLayout panneauGlobal = new BorderLayout();
    				tableauGlobal.setLayout(panneauGlobal);
     
    				// Crée le panneau de score
    				JPanel tableauScore = new JPanel();
    				GridLayout disposition = new GridLayout(3,6); 
    				tableauScore.setLayout(disposition);
     
    				// Ajout des champs au panneau de score
    				tableauScore.add(champVide);
    				tableauScore.add(scoreJeu);
    				tableauScore.add(setEnCours);
    				tableauScore.add(set1);
    				tableauScore.add(set2);
    				tableauScore.add(set3);
    				tableauScore.add(affichageNomJoueur1);
    				tableauScore.add(scoreJeuJoueur1);
    				tableauScore.add(scoreSetEnCoursJoueur1);
    				tableauScore.add(scoreSet1Joueur1);
    				tableauScore.add(scoreSet2Joueur1);
    				tableauScore.add(scoreSet3Joueur1);
    				tableauScore.add(affichageNomJoueur2);
    				tableauScore.add(scoreJeuJoueur2);
    				tableauScore.add(scoreSetEnCoursJoueur2);
    				tableauScore.add(scoreSet1Joueur2);
    				tableauScore.add(scoreSet2Joueur2);
    				tableauScore.add(scoreSet3Joueur2);
     
    				// Ajout du tableau de score dans la zone Nord de la fenêtre globale
    				tableauGlobal.add("North", tableauScore);
     
    				// Crée le panneau avec les boutons
    				JPanel tableauBoutons = new JPanel();
    				GridLayout dispositionBoutons = new GridLayout(3,2); 
    				tableauBoutons.setLayout(dispositionBoutons);
     
    				// Ajout des champs au panneau des boutons
    				tableauBoutons.add(affichageNomJoueur1);
    				tableauBoutons.add(affichageNomJoueur2);
    				tableauBoutons.add(plusJoueur1);
    				tableauBoutons.add(plusJoueur2);
    				tableauBoutons.add(moinsJoueur1);
    				tableauBoutons.add(moinsJoueur2);
     
    				// Ajout du tableau des boutons à la zone center du tableau global
    				tableauGlobal.add("Center", tableauBoutons);
     
    				// Crée le cadre et lui affecte son contenu
    				JFrame frame = new JFrame("Tennis Mental");
    				frame.setContentPane(tableauGlobal);
    				frame.pack();
    				frame.setVisible(true);
    			}
     
    	public static void main(String[] args) {
    		Fenetre1 fenetre1 = new Fenetre1();
    	}
     
    }
    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Bonjour,

    Votre actionPerformed execute new Fenetre2(), c'est à dire qu'il crée une instance d'une classe Fenetre2 dont nous n'avons pas le code. Il faut peut-être simplement changer new Fenetre2() par l'appel de la méthode Fenetre2():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void actionPerformed(ActionEvent événement) {
    				Fenetre2(); // Sans le "new"
    			}
    j'ai tout réuni dans une même classe, je ne sais pas si c'est le plus simple.
    Ca n'est pas plus simple non. On essaye généralement de séparer les roles dans des classes différentes. Votre première approche était donc correcte, il faudrait juste trouver la raison de votre problème.

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour, merci de votre réponse

    Effectivement, sans le "new" ma première solution fonctionne, la 2ème fenêtre est bien créée. Il y a juste les JLabel "affichageNomJoueur(1 et 2)" qui ne s'affichent pas à la fois dans le JPanel "tableauScore" et dans le JPanel "tableauBoutons". J'ai contourné le problème en créant deux nouveaux JPanel mais qui récupèrent exactement la même donnée de la 1ère fenêtre, mais je trouve que ça "alourdit" un peu le code même si ça ne rajouter que 2 lignes.

    J'essaye maintenant de bosser sur le fait de séparer la construction des deux fenêtres dans deux classes différentes, voila mon code :

    Classe Fenetre1 :
    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
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.BorderLayout;
     
    public class Fenetre1 implements ActionListener {
     
    	//Déclaration de tous les champs de la Fenetre 1
    	JPanel questionnaire = new JPanel();
    	JLabel phraseNomJoueur1 = new JLabel("Entrez le nom du joueur 1 :");
    	JTextField nomJoueur1 = new JTextField(30);
    	JLabel phraseNomJoueur2 = new JLabel("Entrez le nom du joueur 2 :");
    	JTextField nomJoueur2 = new JTextField(30);
    	JLabel phraseFormatMatch = new JLabel("Quel est le format du match ?");
    	String format[] = {"Format 1 (3 sets classiques)",
    						"Format 2 (2 sets puis super tie break)",
    						"Format 4 (2 sets avec no-ad puis super tie break)"};
    	JComboBox choixFormatMatch = new JComboBox(format);
    	JButton valider = new JButton("Valider");
     
    	//Constructeur de la Fenetre 1
    	Fenetre1() {
    		BorderLayout panneauGlobal = new BorderLayout();
    	    questionnaire.setLayout(panneauGlobal);
    	    GridLayout disposition = new GridLayout(7,1); 
    	    questionnaire.setLayout(disposition);
     
    	    questionnaire.add(phraseNomJoueur1);
    	    questionnaire.add(nomJoueur1);
    	    questionnaire.add(phraseNomJoueur2);
    	    questionnaire.add(nomJoueur2);
    	    questionnaire.add(phraseFormatMatch);
    	    questionnaire.add(choixFormatMatch);
    	    questionnaire.add(valider);
     
    	    JFrame frame = new JFrame("Paramètres du match");
    	    frame.setContentPane(questionnaire);
    	    frame.pack();
    	    frame.setVisible(true);
     
    	    valider.addActionListener(this);
    	}
     
     
    		public void actionPerformed(ActionEvent événement) {
    				new Fenetre2();
    		}
     
     
    	public static void main(String[] args) {
    		Fenetre1 fenetre1 = new Fenetre1();
    	}
     
    }
    Classe Fenetre2
    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
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
     
    public class Fenetre2 {
     
    		Fenetre1 parent;
     
    		void Fenetre2() {
    			// Déclaration des champs de la Fenetre 2
    			JPanel tableauGlobal = new JPanel();
    			JLabel champVide = new JLabel(" ");
    			JLabel scoreJeu = new JLabel("Jeu", SwingConstants.CENTER);
    			JLabel setEnCours = new JLabel("Set En Cours", SwingConstants.CENTER);
    			JLabel set1 = new JLabel("Set 1", SwingConstants.CENTER);
    			JLabel set2 = new JLabel("Set 2", SwingConstants.CENTER);
    			JLabel set3 = new JLabel("Set 3", SwingConstants.CENTER);
    			JLabel affichageNomJoueur1 = new JLabel("" + parent.nomJoueur1.getText(), SwingConstants.CENTER);
    			JLabel scoreJeuJoueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSetEnCoursJoueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet1Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet2Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet3Joueur1 = new JLabel("0", SwingConstants.CENTER);
    			JLabel affichageNomJoueur2 = new JLabel("" + parent.nomJoueur2.getText(), SwingConstants.CENTER);
    			JLabel scoreJeuJoueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSetEnCoursJoueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet1Joueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet2Joueur2 = new JLabel("0", SwingConstants.CENTER);
    			JLabel scoreSet3Joueur2 = new JLabel("0", SwingConstants.CENTER);
     
    			JLabel affNomJoueur1 = new JLabel("" + parent.nomJoueur1.getText(), SwingConstants.CENTER);
    			JLabel affNomJoueur2 = new JLabel("" + parent.nomJoueur2.getText(), SwingConstants.CENTER);
    		    JButton plusJoueur1 = new JButton("+");
    		    JButton plusJoueur2 = new JButton("+");
    		    JButton moinsJoueur1 = new JButton("-");
    		    JButton moinsJoueur2 = new JButton("-");
     
     
    				// Crée le panneau global de la fenêtre
    				BorderLayout panneauGlobal = new BorderLayout();
    				tableauGlobal.setLayout(panneauGlobal);
     
    				// Crée le panneau de score
    				JPanel tableauScore = new JPanel();
    				GridLayout disposition = new GridLayout(3,6); 
    				tableauScore.setLayout(disposition);
     
    				// Ajout des champs au panneau de score
    				tableauScore.add(champVide);
    				tableauScore.add(scoreJeu);
    				tableauScore.add(setEnCours);
    				tableauScore.add(set1);
    				tableauScore.add(set2);
    				tableauScore.add(set3);
    				tableauScore.add(affichageNomJoueur1);
    				tableauScore.add(scoreJeuJoueur1);
    				tableauScore.add(scoreSetEnCoursJoueur1);
    				tableauScore.add(scoreSet1Joueur1);
    				tableauScore.add(scoreSet2Joueur1);
    				tableauScore.add(scoreSet3Joueur1);
    				tableauScore.add(affichageNomJoueur2);
    				tableauScore.add(scoreJeuJoueur2);
    				tableauScore.add(scoreSetEnCoursJoueur2);
    				tableauScore.add(scoreSet1Joueur2);
    				tableauScore.add(scoreSet2Joueur2);
    				tableauScore.add(scoreSet3Joueur2);
     
    				// Ajout du tableau de score dans la zone Nord de la fenêtre globale
    				tableauGlobal.add("North", tableauScore);
     
    				// Crée le panneau avec les boutons
    				JPanel tableauBoutons = new JPanel();
    				GridLayout dispositionBoutons = new GridLayout(3,2); 
    				tableauBoutons.setLayout(dispositionBoutons);
     
    				// Ajout des champs au panneau des boutons
    				tableauBoutons.add(affNomJoueur1);
    				tableauBoutons.add(affNomJoueur2);
    				tableauBoutons.add(plusJoueur1);
    				tableauBoutons.add(plusJoueur2);
    				tableauBoutons.add(moinsJoueur1);
    				tableauBoutons.add(moinsJoueur2);
     
    				// Ajout du tableau des boutons à la zone center du tableau global
    				tableauGlobal.add("Center", tableauBoutons);
     
    				// Crée le cadre et lui affecte son contenu
    				JFrame frame = new JFrame("Tennis Mental");
    				frame.setContentPane(tableauGlobal);
    				frame.pack();
    				frame.setVisible(true);
    			}
    }

  4. #4
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Personnellement je pense que vous pourriez encore améliorer le code en extrayant certains composants. Il n'est pas rare de retrouver un série de composants qui sont des JPanel déjà prêts avec tout ce qui va bien.
    Par exemple, un composant pour le formulaire du début (joueurs et mode), un pour les scores, etc..

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je ne comprends pas trop ce que vous voulez dire...

    Que je devrais plutôt avoir un seul JFrame pour tout mon programme, et que je ne fasse que changer de JPanel à l'intérieur ?

  6. #6
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Avoir une seule JFrame est également une option, mais je parlais de créer des composants:

    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
     
    class Fenetre1 {
       private final StartGameForm form = new StartGameForm();
       public Fenetre1() {
         add(form);
         form.onValidate(this);
       }
    }
     
    class Fenetre2 {
      private final ScorePanel score = new ScorePanel();
      private final ButtonsPanel buttons = new ButtonsPanel(); 
     
      public Fenetre2() {
        add(score, BorderLayout.NORTH);
        add(buttons, BorderLayout.CENTER);
     
     
        // ...
        score.setSet1Joueur1(..);
      }
    }

Discussions similaires

  1. Création d'une fenêtre pour changer un mot de passe
    Par beginner1 dans le forum WinDev
    Réponses: 4
    Dernier message: 09/08/2012, 14h56
  2. Réponses: 4
    Dernier message: 16/11/2009, 22h39
  3. Réponses: 1
    Dernier message: 12/11/2007, 14h04
  4. API pour changer le proxy du navigateur
    Par SteelBox dans le forum Windows
    Réponses: 2
    Dernier message: 16/02/2004, 23h15
  5. Réponses: 4
    Dernier message: 16/02/2004, 16h55

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