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 :
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);
    }
}
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
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();
    }
}
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
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()));
    }
}
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
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();
    }
}
Je vous passe la connection à la base de données qui, elle, fonctionne bien.

Pourquôa ma JFrame ne s'actualise pas ?

Merci d'avance pour votre aide