problème d'affichage d'une JFrame
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:
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:
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:
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:
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 :)