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