Problème changement fenêtre

Problème changement fenêtre - Java - Programmation

Marsh Posté le 30-04-2009 à 20:44:00    

Bonjour, dans mon travail de fin d'année je me retrouve coincé.
Je vous expose le problème, et mettrai les sources après.
 
J'ai pour faire simple une interface de login pour me connecter à une base de données Access au lancement de mon application, une fois le login effectué et vérifié, ma jolie interface devrait s'en aller pour laisser place à la fenêtre principale de mon application, fenêtre dans laquelle il y aura la barre de menu, et dans laquelle auront lieu les différentes opérations.
 
Mon problème réside dans le fait que lorsque je fais appel à ma fenêtre d'application principale si j'ajoute la barre de menu dedans, j'ai une erreur à l'exécution.  
 
Je pense comprendre l'erreur, qui réside dans le fait, que comme ma page de login elle le container et qu'elle ne fait que recevoir une JPanel dedans, il faudrait que le barre de menu soit incorporée dans la classe de Login.
 
Bon pas très clair mais difficile à expliquer, vous verrez peut être mieux avec les sources.
 
D'avance merci.
 

Code :
  1. package tfe;
  2. import java.sql.*;
  3. import javax.swing.*;
  4. public class Principal
  5. {
  6.  public static void main(String args[])
  7.  {
  8.   new Logon();
  9.  }
  10. }


 

Code :
  1. package tfe;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.sql.*;
  6. public class Logon extends JFrame{
  7. private Container contain;
  8. private windowAppli fenetre;
  9. private JPanel panHaut, panBas, panGauche, panDroit;
  10. private ImageIcon logo = new ImageIcon("images\\logo.png" );
  11. private JButton butExit, butLogin;
  12. private JLabel labBdd, labMdp, labLogo;
  13. private JTextField nomBddField;
  14. private JPasswordField passField;
  15. private static Connection connect;
  16. public Logon(){
  17.  contain = getContentPane();
  18.  this.setLayout(null);
  19.  setBounds(0,0,1280,800);
  20.  this.setResizable(false);
  21.  this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  22.  this.setTitle("<<< Application de maintenance informatique >>>" );
  23.  panHaut = new JPanel();
  24.     panBas = new JPanel();
  25.  panGauche = new JPanel();
  26.  panDroit = new JPanel();
  27.  panHaut.setBackground(Color.decode("#00309C" ));
  28.  panBas.setBackground(Color.decode("#00309C" ));
  29.  panGauche.setBackground(Color.decode("#5A7EDC" ));
  30.  panDroit.setBackground(Color.decode("#5A7EDC" ));
  31.  panHaut.setBounds(0,0,1280,100);
  32.  panBas.setBounds(0,670,1280,100);
  33.  panGauche.setBounds(0,100,640,570);
  34.  panDroit.setBounds(640,100,640,570);
  35.  contain.add(panHaut);
  36.  contain.add(panBas);
  37.  contain.add(panGauche);
  38.  contain.add(panDroit);
  39.  panDroit.setLayout(null);
  40.  panBas.setLayout(null);
  41.  labLogo = new JLabel(logo);
  42.  panGauche.add(labLogo);
  43.  labBdd = new JLabel("Base de données  " );
  44.  labBdd.setBounds(50,200,150,30);
  45.  panDroit.add(labBdd);
  46.  nomBddField = new JTextField("IntervMaint", 20);
  47.  nomBddField.setEditable(false);
  48.  nomBddField.setBounds(180,200,150,30);
  49.  panDroit.add (nomBddField);
  50.  labMdp = new JLabel("Mot de passe  " );
  51.  labMdp.setBounds(50,250,150,30);
  52.  panDroit.add(labMdp);
  53.  passField = new JPasswordField("test", 20);
  54.  passField.setBounds(180,250,150,30);
  55.  panDroit.add(passField);
  56.  butLogin = new JButton("Login" );
  57.  butLogin.setBounds(340,250,150,30);
  58.  panDroit.add(butLogin);
  59.  butExit = new JButton("Exit" );
  60.  butExit.setBounds(50,35,60,35);
  61.  panBas.add(butExit);
  62.  this.setVisible(true);
  63.  //Ajout d'un écouteur d'événement sur la fenêtre
  64.  //*************************************************************************
  65.  this.addWindowListener(new WindowAdapter(){
  66.   public void windowClosing(WindowEvent evt){
  67.    int choix = JOptionPane.showConfirmDialog(contain,"Voulez vous vraiment quitter l'application ?",
  68.      "Quitter l'application ?", JOptionPane.YES_NO_OPTION);
  69.    if (choix == JOptionPane.YES_OPTION) {
  70.     JOptionPane.showMessageDialog(null,"Merci d'avoir utilisé notre application, à bientôt !","Aurevoir !", JOptionPane.INFORMATION_MESSAGE);
  71.     System.exit(0);}  
  72.    else {
  73.     JOptionPane.showMessageDialog(null,"Continuons à utiliser l'application dans ce cas","Utilisation de l'application",JOptionPane.INFORMATION_MESSAGE);
  74.    }
  75.   }
  76.  });
  77.  
  78.  //Ajout d'un écouteur d'événement sur le menu
  79.  //*************************************************************************
  80.  ButtonListener bL = new ButtonListener();
  81.  butExit.addActionListener(bL);
  82.  butLogin.addActionListener(bL);
  83.  nomBddField.addActionListener(bL);
  84.  passField. addActionListener(bL);
  85.  
  86. }
  87.  
  88. private class ButtonListener implements ActionListener{
  89.  public void actionPerformed (ActionEvent evt){
  90.    
  91.   String nomBDD;
  92.   String pass;
  93.    
  94.   if (evt.getSource()==nomBddField){// Permet de taper 'Enter' pour passer au champ suivant
  95.    passField.requestFocus();
  96.   }
  97.    
  98.   if (evt.getSource() == butLogin || evt.getSource() == passField) {
  99.    nomBDD = nomBddField.getText();
  100.    pass = new String(passField.getPassword());
  101.    try {
  102.     connect = AccesGen.connecter(nomBDD, " ", pass);
  103.     JOptionPane.showMessageDialog(null,"Vous êtes bien connecté à la base de données "
  104.       + nomBDD, "Connecté",JOptionPane.INFORMATION_MESSAGE);
  105.     contain.removeAll();
  106.     contain.setLayout(new BorderLayout());
  107.     fenetre = new windowAppli(Logon.this);
  108.     contain.add(fenetre, BorderLayout.CENTER);
  109.     contain.repaint();
  110.     Logon.this.setVisible(true);
  111.     }  
  112.    
  113.    catch (SQLException e) {
  114.     JOptionPane.showMessageDialog(null, e,
  115.       "Erreur de connexion", JOptionPane.ERROR_MESSAGE);
  116.     }
  117.   }
  118.    
  119.   if (evt.getSource() == butExit) {
  120.    int choix = JOptionPane.showConfirmDialog(contain,"Voulez vous vraiment quitter l'application ?",
  121.      "Quitter l'application ?", JOptionPane.YES_NO_OPTION);
  122.    if (choix == JOptionPane.YES_OPTION) {
  123.     JOptionPane.showMessageDialog(null,"Merci d'avoir utilisé notre application, à bientôt !","Aurevoir !", JOptionPane.INFORMATION_MESSAGE);
  124.     System.exit(0);
  125.    }  
  126.    else{
  127.     JOptionPane.showMessageDialog(null,"Continuons à utiliser l'application dans ce cas","Utilisation de l'application",JOptionPane.INFORMATION_MESSAGE);
  128.    }
  129.   }
  130.  }
  131. }
  132. }


 

Code :
  1. package tfe;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.sql.*;
  6. public class windowAppli extends JPanel {
  7. private Logon fenetre;
  8. private JMenuBar menuBarre;
  9. public windowAppli(Logon fenetre){
  10.  this.fenetre=fenetre;
  11.  fenetre.setTitle("test" );
  12.  this.add(menuBarre);
  13. }
  14. public JMenuBar getMenuBarre() {
  15.  return menuBarre;
  16. }
  17. }

Reply

Marsh Posté le 30-04-2009 à 20:44:00   

Reply

Marsh Posté le 30-04-2009 à 21:41:13    

D'un point de vue conceptuel j'ai pas trop compris, du moins j'aurais pas fait comme ça si c'est ce que je pense.
 
Si je comprends bien tu veux ajouter un menu à ta fenêtre Logon et une fois que l'utilisateur s'est identifié tu ferme cette fenêtre pour en afficher une autre ? (reste à savoir si le menu tu veux le garder ou le changer lors de la disparition de ta "fenêtre" Logon)
 
 
Si c'est ça, perso. j'aurais fais :  
- hérité ma classe Logon d'un JPanel et la classe WindowAppli d'un JFrame.
- ajouter à mon contentPane (de la classe WindowAppli) mon Logon puis mon menu (que j'aurais géré dans WindowAppli)
- dés que l'utilisateur s'est identifié, tu peux garder le menu et faire en sorte que ton Logon uniquement ne s'affiche plus
 
Sinon, un autre cas, j'aurais géré Logon dans une fenêtre indépendante (avec le menu inclus dedans) ensuite dans ma méthode main j'aurais géré l'affichage de Logon et de WindowAppli de cette maniere :
 
- Logon logon = new Logon();
- un test si l'utlisiteur s'est bien identifier
- si l'identification est ok ==> un logon.setVisible(false); et une instanciation de WindowAppli qui gére ton appli principale.
 
Note :
Pour ajouter ton menuBarre j'aurais utilisé ça : (je sais pas si de la manière dont tu le fais c'est correct)

Code :
  1. this.setJMenuBar(menuBar);


Message édité par manu f le 30-04-2009 à 22:15:51

---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed