Bonjour à tous !
J'ai un problème avec l'affichage de ma frame : l'utilisateur doit se connecter via un pseudo et mdp.
Lors du clic, si ceux-ci ne correspondent pas avec la base de données, je ré-affiche la page de démarrage avec un message indiquant qu'il s'est planté.
Problème : la frame ne m'affiche pas le message. Elle ne m'affiche même rien du tout, jusqu'à ce que je la redimensionne où elle m'affiche toujours la fenêtre avant le changement...
classe Vue avec mes affichages :
Mon Listener utilisé lors du clic sur le bouton OK
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 public class Vue { JFrame mainFrame; JFrame popup; Controleur c; public Vue(Controleur c) { this.c = c; // Fenêtre principale mainFrame = new JFrame(); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setSize(new Dimension(600, 400)); mainFrame.setLocationRelativeTo(null); // Fentêtre secondaire popup = new JFrame(); popup.setSize(new Dimension(300, 200)); popup.setLocationRelativeTo(null); popup.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public void afficherEcranDemarrage() { mainFrame.setContentPane(new EcranDemarrage(this.c)); mainFrame.setVisible(true); } public void afficherEcranDemarrage(String messageOptionnel) { EcranDemarrage ed = new EcranDemarrage(this.c); ed.setMessageOptionnel(messageOptionnel); mainFrame.setContentPane(ed); mainFrame.repaint(); } public void afficherPopupNouvelUtilisateur() { popup.setContentPane(new PopupNouvelUtilisateur(this.c)); popup.setVisible(true); } public void masquerPopup() { popup.setVisible(false); } }
Le JPanel sur lequel je mets mon écran de démarrage
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 package controleur; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class OkListener implements ActionListener { Cliquable clic; Controleur c; public OkListener(Controleur c, Cliquable pan) { super(); this.clic = pan; this.c = c; } @Override public void actionPerformed(ActionEvent e) { clic.okButton(); if (clic.isPopup()) c.getView().masquerPopup(); } }
Mon contrôleur :
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 package vue; import controleur.Cliquable; import controleur.Controleur; import javax.swing.*; import java.awt.*; public class EcranDemarrage extends JPanel implements Cliquable { private GridBagLayout gbl = new GridBagLayout(); private GridBagConstraints gbc = new GridBagConstraints(); private JButton ok = new JButton("Connexion"); private JButton clear = new JButton("C"); private JButton nouveau = new JButton("Je n'ai pas d'identifiant"); private JTextField id = new JTextField(); private JPasswordField mdp = new JPasswordField(); private String messageOptionnel; private Controleur c; public EcranDemarrage(Controleur c) { this.c = c; messageOptionnel = "un message optionnel"; ok.addActionListener(new controleur.OkListener(this.c, this)); clear.addActionListener(new controleur.ClearListener(this.c, this)); nouveau.addActionListener(new controleur.NouvelIdentifiantListener(this.c)); this.setLayout(gbl); gbc.fill = 1; gbc.gridx = 0; gbc.gridy = 0; this.add(new JLabel("Identifiant"), gbc); gbc.gridx = 1; this.add(id, gbc); gbc.gridx = 0; gbc.gridy = 1; this.add(new JLabel("Mot de passe"), gbc); gbc.gridx = 1; this.add(mdp, gbc); gbc.gridx = 1; gbc.gridy = 2; this.add(ok, gbc); gbc.gridx = 0; this.add(clear, gbc); gbc.gridy = 3; gbc.gridwidth = 2; this.add(nouveau, gbc); gbc.gridy = 4; this.add(new JLabel(messageOptionnel), gbc); } public void setMessageOptionnel(String message) { this.messageOptionnel = message; } @Override public void clearButton() { this.id.setText(""); this.mdp.setText(""); } @Override public void okButton() { System.out.println("Connexion en tant que : " + "id = " + id.getText() + "; mdp = " + new String(mdp.getPassword())); this.c.nouvelleConnexion(id.getText(), new String(mdp.getPassword())); } }
Je vous passe la connection à la base de données qui, elle, fonctionne bien.
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 package controleur; import bzh.waitwaitw.basesdedonnees.*; import modele.Modele; import vue.Vue; public class Controleur { private BaseDeDonnees bdd; private Modele model; private Vue view; public Controleur() { // Base de données bdd = new BaseDeDonnees("blanket"); String[] tables = new String[4]; String[] contenus = new String[4]; tables[0] = "utilisateur"; contenus[0] = "pseudo VARCHAR PRIMARY KEY," + "mdp VARCHAR NOT NULL"; tables[1] = "compte"; contenus[1] = "id SERIAL PRIMARY KEY," + "userID VARCHAR," + "FOREIGN KEY (userID) REFERENCES Utilisateur(pseudo)"; tables[2] = "theme"; contenus[2] = "id SERIAL PRIMARY KEY," + "nom VARCHAR NOT NULL"; tables[3] = "operation"; contenus[3] = "id SERIAL PRIMARY KEY,\n" + "type BOOLEAN NOT NULL,\n" + "montant FLOAT8 NOT NULL,\n" + "dateReelle DATE,\n" + "dateBanque DATE,\n" + "recurrenceJours INTEGER,\n" + "recurrenceMois INTEGER,\n" + "themeID INTEGER,\n" + "compteID INTEGER NOT NULL,\n" + "FOREIGN KEY (compteID) REFERENCES Compte(id),\n" + "FOREIGN KEY (themeID) REFERENCES Theme(id)"; try { bdd.setTables(tables, contenus); System.out.println("Objet BaseDeDonnees bien créé."); } catch (BaseDeDonneesException e) { System.err.println("Erreur lors de la création de l'objet BaseDeDonnees."); e.printStackTrace(); } // Connexion JDBC PostgreSQL.ajouterDriver(); // chez moi, le mdp superuser est dbpass, mais il peut être différent selon la machine bdd.setConnection(PostgreSQL.Connexion(bdd, "postgres", "dbpass")); // Modele model = new Modele(this); // Vue view = new Vue(this); view.afficherEcranDemarrage(); } public Modele getModel() { return this.model; } public Vue getView() { return this.view; } public BaseDeDonnees getBdd() { return this.bdd; } public void nouvelleConnexion(String id, String mdp) { boolean result = model.verifierInfos(id, mdp); if (!result) { System.out.println("mauvais pseudo/mdp"); this.view.afficherEcranDemarrage("Le pseudo et le mot de passe ne correspondent pas."); } } public static void main(String[] args) { /*try { System.setOut(new PrintStream(new File("logs.txt"))); } catch (FileNotFoundException e) { e.printStackTrace(); }*/ new Controleur(); } }
Pourquôa ma JFrame ne s'actualise pas ?
Merci d'avance pour votre aide![]()
Partager