Bonjour,
Je vous évoque mon problème, je suis actuellement en train de mettre en place une application de gestion de personne. J'ai crée une interface graphique ou je peux ajouter une personne, en remplissant tous les champs nécessaires à sa création et ou je peux supprimer une personne, en faisant une recherche avec son nom et son prénom.
J'ai donc deux panels, un me permettant de rechercher une personne par son nom et son prénom et un me permettant de modifier chacun de ses champs. Je veux maintenant traiter le cas de la modification d'une personne, pour se faire, plutôt que de recopier tout le code des deux panels dans une seule classe, j'ai décidé de ne pas créer de panel ModifierPersonne mais de changer mes deux panels ajouter et supprimer en ajoutant des conditions me permettant d'utiliser la modification par leur biais.
Ça fonctionne bien, je peux rechercher puis modifier la personne mais j'ai des soucis d'ordre en graphique, en effet les labels disparaissent lors de la modification des champs et les boutons n'apparaissent que quand je passe la souris dessus.
Je pense que le problème viens de l'ajout, que j'effectue dans mon listener de cette façon :
monPanelRechercherPersonne.getTopLevelAncestor().add(monPan);
Je ne crois pas que ce soit la bonne manière de changer de panel, mais je ne vois pas vraiment quoi faire d'autre. J'ai essayé des repaint dans tous les sens mais ça n'a jamais rien donné. J'espère que vous pourrez m'aider.
Voici mon code ultra-simplifié :
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 import java.awt.CardLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; public class PanelListe extends JFrame { private static final long serialVersionUID = 1L; //Va permettre au système de connaitre le panel en cours et autoriser ou non la selection d'un menu static final String[] PANEL = {"p0", "p1", "p2", "p3"}; static String monPanelEnCours = PANEL[0]; public PanelListe() { final JPanel panelPrincipal = new JPanel (); panelPrincipal.setLayout(new CardLayout ()); PanelCreerPersonne monPanelCreerPersonne = null; monPanelCreerPersonne = new PanelCreerPersonne ("Creer", -1); PanelRechercherPersonne monPanelModifierPersonne = new PanelRechercherPersonne ("Modifier"); PanelRechercherPersonne monPanelSupprimerPersonne = new PanelRechercherPersonne ("Supprimer"); //Le panel p0 est un panel vide qui est celui par défaut panelPrincipal.add(PANEL[0], new JPanel()); panelPrincipal.add(PANEL[1], monPanelCreerPersonne); panelPrincipal.add(PANEL[2], monPanelModifierPersonne); panelPrincipal.add(PANEL[3], monPanelSupprimerPersonne); this.add(panelPrincipal); JMenuBar menuPrincipal = new JMenuBar(); JMenu menuFichier = new JMenu("Fichier"); JMenu menuPersonne = new JMenu("Personne"); JMenuItem quitter = new JMenuItem("Quitter"); final JMenuItem creerPersonne = new JMenuItem("Creer une personne"); final JMenuItem modifierPersonne = new JMenuItem("Modifier une personne"); final JMenuItem supprimerPersonne = new JMenuItem("Supprimer une personne"); class ActionListenerQuitter implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { System.exit(0); } } quitter.addActionListener(new ActionListenerQuitter ()); class ActionListenerPersonne implements ActionListener { private String panelACharger = PANEL[0]; @Override public void actionPerformed(ActionEvent arg0) { if (arg0.getActionCommand().equals(creerPersonne.getActionCommand())) { panelACharger = PANEL[1]; } if (arg0.getActionCommand().equals(modifierPersonne.getActionCommand())) { panelACharger = PANEL[2]; } if (arg0.getActionCommand().equals(supprimerPersonne.getActionCommand())) { panelACharger = PANEL[3]; } //Si on est sur le panel par défaut vide if (monPanelEnCours.equals(PANEL[0])) { ((CardLayout) panelPrincipal.getLayout()).show(panelPrincipal, panelACharger); monPanelEnCours = panelACharger; } else { JOptionPane.showMessageDialog(null, "Quitter d'abord le menu actuel avant d'en selectionner un autre.", "Information", JOptionPane.INFORMATION_MESSAGE); } } } creerPersonne.addActionListener(new ActionListenerPersonne ()); modifierPersonne.addActionListener(new ActionListenerPersonne ()); supprimerPersonne.addActionListener(new ActionListenerPersonne ()); menuFichier.add(quitter); menuPersonne.add(creerPersonne); menuPersonne.add(modifierPersonne); menuPersonne.add(supprimerPersonne); menuPrincipal.add(menuFichier); menuPrincipal.add(menuPersonne); this.setJMenuBar(menuPrincipal); } public static void main(String[] args) { PanelListe fenetre = new PanelListe(); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setTitle("Test"); fenetre.setSize(700, 500); fenetre.setVisible(true); } }
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class PanelCreerPersonne extends JPanel { private GererPersonneCtrl ctrlUseCase; private static final long serialVersionUID = 1L; private JLabel jlNom; private JLabel jlPrenom; private JTextField jtfNom = new JTextField(46); private JTextField jtfPrenom = new JTextField(46); private JButton jbValider; private JButton jbQuitter; private String typeDeTraitement; private int idPersonneAModifie = -1; public PanelCreerPersonne(String typeDeTraitement, int idPersonneAModifie) { this.ctrlUseCase = new GererPersonneCtrl(); this.typeDeTraitement = typeDeTraitement; if (typeDeTraitement.equals("Creer")) { this.PanelGererInfosPersonne(); } if (typeDeTraitement.equals("Modifier") && idPersonneAModifie > -1) { this.idPersonneAModifie = idPersonneAModifie; PersonneDTO persTempo = this.ctrlUseCase.modifierPersonne(this.idPersonneAModifie, "0", "0"); //this.jtfNom.setText(persTempo.getNom()); //this.jtfPrenom.setText(persTempo.getPrenom()); //Pour l'exemple this.jtfNom.setText("Test"); this.jtfPrenom.setText("Test"); this.PanelGererInfosPersonne(); } } public void PanelGererInfosPersonne() { jlNom = new JLabel("Nom :"); jlPrenom = new JLabel("Prenom :"); jbValider = new JButton("Valider"); jbQuitter = new JButton("Quitter"); //Utilisation d'une classe interne locale class ActionListenerValider implements ActionListener { private PanelCreerPersonne monPanelCreerPersonne; @Override public void actionPerformed(ActionEvent arg0) { PersonneDTO persDTO = null; if (monPanelCreerPersonne.typeDeTraitement.equals("Creer")) { int idPersonne = 0; idPersonne = ctrlUseCase.dernierIdPersonne()+1; persDTO = new PersonneDTO(idPersonne, jtfNom.getText(), jtfPrenom.getText()); ctrlUseCase.creerPersonne(persDTO); JOptionPane.showMessageDialog(jbValider, jtfNom.getText()+" "+jtfPrenom.getText()+" a bien été enregistré(e) comme Personne", "Information", JOptionPane.INFORMATION_MESSAGE); this.monPanelCreerPersonne.reinitialiserFormulaire(); } if (monPanelCreerPersonne.typeDeTraitement.equals("Modifier")) { persDTO = new PersonneDTO(monPanelCreerPersonne.idPersonneAModifie, jtfNom.getText(), jtfPrenom.getText()); ctrlUseCase.modifierPersonneAll(persDTO); JOptionPane.showMessageDialog(jbValider, jtfNom.getText()+" "+jtfPrenom.getText()+" a bien été modifié", "Information", JOptionPane.INFORMATION_MESSAGE); this.monPanelCreerPersonne.reinitialiserFormulaire(); } } ActionListenerValider (PanelCreerPersonne monPanelCreerPersonne) { this.monPanelCreerPersonne = monPanelCreerPersonne; } } jbValider.addActionListener (new ActionListenerValider (this)); //Utilisation d'une classe interne locale class ActionListenerQuitter implements ActionListener { private PanelCreerPersonne monPanelCreerPersonne; @Override public void actionPerformed(ActionEvent arg0) { this.monPanelCreerPersonne.setVisible(false); this.monPanelCreerPersonne.reinitialiserFormulaire(); //On indique au système que le panel en cours est celui par défaut PanelListe.monPanelEnCours = PanelListe.PANEL[0]; } ActionListenerQuitter (PanelCreerPersonne monPanelCreerPersonne) { this.monPanelCreerPersonne = monPanelCreerPersonne; } } jbQuitter.addActionListener(new ActionListenerQuitter (this)); //Affichage this.setLayout(new BorderLayout()); final JPanel jpButton = new JPanel(); final JPanel jpInformation = new JPanel(); jpInformation.setLayout(new BoxLayout(jpInformation, BoxLayout.PAGE_AXIS)); final JPanel jpPersonne = new JPanel(); jpPersonne.setLayout(new GridBagLayout()); // Contrainte label final GridBagConstraints gbcLabel = new GridBagConstraints(); gbcLabel.fill = GridBagConstraints.HORIZONTAL; gbcLabel.gridx = 0; // Contrainte texte final GridBagConstraints gbcText = new GridBagConstraints(); gbcText.fill = GridBagConstraints.HORIZONTAL; gbcText.gridx = 1; // Personne gbcLabel.gridy = 1; jpPersonne.add(jlNom, gbcLabel); gbcText.gridy = 1; jpPersonne.add(jtfNom, gbcText); gbcLabel.gridy = 2; jpPersonne.add(jlPrenom, gbcLabel); gbcText.gridy = 2; jpPersonne.add(jtfPrenom, gbcText); jpInformation.add(jpPersonne); this.add(jpInformation, BorderLayout.CENTER); jpButton.add(jbValider); jpButton.add(jbQuitter); this.add(jpButton, BorderLayout.SOUTH); } public void reinitialiserFormulaire() { jtfNom.setText(""); jtfPrenom.setText(""); } }
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183 import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class PanelRechercherPersonne extends JPanel { private GererPersonneCtrl ctrlUseCase; private static final long serialVersionUID = 1L; private JLabel jlTitre; private JLabel jlNom; private JLabel jlPrenom; private JTextField jtfNom; private JTextField jtfPrenom; private JButton jbValider; private JButton jbQuitter; private String typeDeTraitement; public PanelRechercherPersonne() {} public PanelRechercherPersonne(String typeDeTraitement) { this.typeDeTraitement = typeDeTraitement; if (typeDeTraitement.equals("Supprimer")) { this.jlTitre = new JLabel("Veuillez tapez le nom et le prénom de la personne à supprimer."); this.PanelPersonne(); } if (typeDeTraitement.equals("Modifier")) { this.jlTitre = new JLabel("Veuillez tapez le nom et le prénom de la personne à modifier."); this.PanelPersonne(); } } public void PanelPersonne () { this.ctrlUseCase = new GererPersonneCtrl(); jlNom = new JLabel("Nom :"); jlPrenom = new JLabel("Prenom :"); jtfNom = new JTextField(46); jtfPrenom = new JTextField(46); jbValider = new JButton("Valider"); jbQuitter = new JButton("Quitter"); //Utilisation d'une classe interne locale class ActionListenerValider implements ActionListener { private PanelRechercherPersonne monPanelRechercherPersonne; @Override public void actionPerformed(ActionEvent arg0) { int idPersonne = -1; boolean listeEstVide = true; listeEstVide = ctrlUseCase.listeEstVide(); if(!listeEstVide) { idPersonne = ctrlUseCase.rechercherPersonne(jtfNom.getText(), jtfPrenom.getText()); if (idPersonne>=0) { if (monPanelRechercherPersonne.typeDeTraitement.equals("Supprimer")) { ctrlUseCase.supprimerPersonne(idPersonne); JOptionPane.showMessageDialog(jbValider, "La suppression a bien fonctionné", "Information", JOptionPane.INFORMATION_MESSAGE); this.monPanelRechercherPersonne.reinitialiserFormulaire(); } if (monPanelRechercherPersonne.typeDeTraitement.equals("Modifier")) { this.monPanelRechercherPersonne.setVisible(false); this.monPanelRechercherPersonne.reinitialiserFormulaire(); PanelCreerPersonne monPan = new PanelCreerPersonne("Modifier", idPersonne); monPanelRechercherPersonne.getTopLevelAncestor().add(monPan); } } else { JOptionPane.showMessageDialog(jbValider, "Aucune personne correspondante n'a été trouvé", "Information", JOptionPane.INFORMATION_MESSAGE); } } else { JOptionPane.showMessageDialog(jbValider, "La liste est vide", "Information", JOptionPane.INFORMATION_MESSAGE); } } ActionListenerValider (PanelRechercherPersonne monPanelRechercherPersonne) { this.monPanelRechercherPersonne = monPanelRechercherPersonne; } } jbValider.addActionListener (new ActionListenerValider (this)); //Utilisation d'une classe interne locale class ActionListenerQuitter implements ActionListener { private PanelRechercherPersonne monPanelRechercherPersonne; @Override public void actionPerformed(ActionEvent arg0) { this.monPanelRechercherPersonne.setVisible(false); this.monPanelRechercherPersonne.reinitialiserFormulaire(); //On indique au système que le panel en cours est celui par défaut PanelListe.monPanelEnCours = PanelListe.PANEL[0]; } ActionListenerQuitter (PanelRechercherPersonne monPanelRechercherPersonne) { this.monPanelRechercherPersonne = monPanelRechercherPersonne; } } jbQuitter.addActionListener(new ActionListenerQuitter (this)); //Affichage this.setLayout(new BorderLayout()); final JPanel jpButton = new JPanel(); final JPanel jpInformation = new JPanel(); jpInformation.setLayout(new BoxLayout(jpInformation, BoxLayout.PAGE_AXIS)); final JPanel jpPersonne = new JPanel(); jpPersonne.setLayout(new GridBagLayout()); // Contrainte label final GridBagConstraints gbcLabel = new GridBagConstraints(); gbcLabel.fill = GridBagConstraints.HORIZONTAL; gbcLabel.gridx = 0; // Contrainte texte final GridBagConstraints gbcText = new GridBagConstraints(); gbcText.fill = GridBagConstraints.HORIZONTAL; gbcText.gridx = 1; // Affichage gbcText.gridy = 0; jpPersonne.add(jlTitre, gbcText); gbcLabel.gridy = 1; jpPersonne.add(jlNom, gbcLabel); gbcText.gridy = 1; jpPersonne.add(jtfNom, gbcText); gbcLabel.gridy = 2; jpPersonne.add(jlPrenom, gbcLabel); gbcText.gridy = 2; jpPersonne.add(jtfPrenom, gbcText); jpInformation.add(jpPersonne); this.add(jpInformation, BorderLayout.CENTER); jpButton.add(jbValider); jpButton.add(jbQuitter); this.add(jpButton, BorderLayout.SOUTH); } public void reinitialiserFormulaire() { jtfNom.setText(""); jtfPrenom.setText(""); } }
Partager