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
    Nouveau membre du 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
    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 chevronn�
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    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
    Nouveau membre du 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
    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 chevronn�
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    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
    Nouveau membre du 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
    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 chevronn�
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    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