IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème d'affichage de mes classes


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut Problème d'affichage de mes classes
    Salut.

    J'ai un petit soucis d'affichage sous Eclipse. J'ai deux classes ("meteorologie" et "Identification") faisant parties du package "stat_meteo". Pour simplifier, ma classe meteorologie contient un Jpanel dans lequel se trouve un autre JPanel "jPUtilisateur" et un JTabbedPane "jTPOngletConfig". Ma classe Identification a elle entre autre un "public String droit".

    J'instancie dans le main se trouvant dans ma classe meteorologie un objet Identification. Je fais un setVisible pour les deux, et les deux s'affichent.
    le problème vient après. Je souhaite que ce soit soit "jTPOngletConfig", soit "jPUtilisateur" qui soit visible, et uniquement après la saisie du mot de passe contenue dans une base Mysql (utilisation de mysql-connector).

    Voici ma classe Identification :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    package stat_meteo;
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.Dimension;
    import javax.swing.JLabel;
    import java.awt.Rectangle;
    import javax.swing.JTextField;
    import java.awt.Point;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.*;
     
    import javax.swing.JPasswordField;
    import javax.swing.JButton;
     
    public class Identification extends JFrame {
     
    	private static final long serialVersionUID = 1L;
     
    	private JPanel jContentPane = null;
     
    	private JLabel jLEnterId = null;
     
    	private JTextField jTFEnter_log = null;
     
    	private JPasswordField jPFPass = null;
     
    	public JButton jBIdentification = null;
     
    	String sLog = null;
    	String sPass = null;
    	public String droit = null;
    	Statement stmt = null;
    	int ligne;
     
    	private JLabel jLNom = null;
     
    	private JLabel jLPass = null;
     
    	/**
             * This is the default constructor
             */
    	public Identification() {
    		super();
    		initialize();
    		try {
    			// tenter de récupérer le driver Mysql
    			Class.forName("com.mysql.jdbc.Driver").newInstance();    
    			System.out.println("Chargement du pilote Mysql réussi");
    		}
    		catch(Exception ee) {
    		   System.err.print("Erreur de chargement du pilote : ");
    		   System.err.println(ee.getMessage());
    		}
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
    		this.setSize(356, 293);
    		this.setContentPane(getJContentPane());
    		this.setTitle("Identification");
    	}
     
    	/**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jLPass = new JLabel();
    			jLPass.setText("Pass :");
    			jLPass.setSize(new Dimension(43, 23));
    			jLPass.setLocation(new Point(30, 135));
    			jLNom = new JLabel();
    			jLNom.setText("User name :");
    			jLNom.setSize(new Dimension(70, 23));
    			jLNom.setLocation(new Point(30, 90));
    			jLEnterId = new JLabel();
    			jLEnterId.setBounds(new Rectangle(75, 45, 196, 23));
    			jLEnterId.setText("Entrez vos identifiants :");
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(jLEnterId, null);
    			jContentPane.add(getJTFEnter_log(), null);
    			jContentPane.add(getJPFPass(), null);
    			jContentPane.add(getJBIdentification(), null);
    			jContentPane.add(jLNom, null);
    			jContentPane.add(jLPass, null);
    		}
    		return jContentPane;
    	}
     
    	/**
             * This method initializes jTFEnter_log 
             *      
             * @return javax.swing.JTextField       
             */
    	private JTextField getJTFEnter_log() {
    		if (jTFEnter_log == null) {
    			jTFEnter_log = new JTextField();
    			jTFEnter_log.setSize(new Dimension(196, 23));
    			jTFEnter_log.setLocation(new Point(105, 90));
    		}
    		return jTFEnter_log;
    	}
     
    	/**
             * This method initializes jPFPass      
             *      
             * @return javax.swing.JPasswordField   
             */
    	private JPasswordField getJPFPass() {
    		if (jPFPass == null) {
    			jPFPass = new JPasswordField();
    			jPFPass.setBounds(new Rectangle(105, 135, 196, 23));
    		}
    		return jPFPass;
    	}
     
    	/**
             * This method initializes jBIdentification     
             *      
             * @return javax.swing.JButton  
             */
    	private JButton getJBIdentification() {
    		if (jBIdentification == null) {
    			jBIdentification = new JButton();
    			jBIdentification.setBounds(new Rectangle(105, 180, 135, 32));
    			jBIdentification.setText("S'identifier");
    			jBIdentification.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					sLog = jTFEnter_log.getText();
    					sPass = new String(jPFPass.getPassword());
    					try{
    						Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/meteo?user="+sLog+"&password="+sPass+"");
    						String sql = "SELECT nom,pass,droits FROM utilisateurs WHERE nom='"+sLog+"' AND pass='"+sPass+"';";
    						stmt = conn.createStatement();
    						ResultSet RSet = stmt.executeQuery(sql);
    						RSet.last();			//Saut sur la derniere rangée...
    						ligne = RSet.getRow();	//récupération du nombre de résultat
    						System.out.println("droit : "+droit);
    						if(ligne!=0){
    							RSet.first();
    							droit = RSet.getString(3);
    							System.out.println("droit : "+droit);	//affichage des droits de cet user
    						}
    						conn.close();
    					}
    					catch(SQLException ex){
    						System.out.println("SQLException: " + ex.getMessage());
    						System.out.println(ligne);
    						System.out.println(droit);
    					}
    					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    				}
    			});
    		}
    		return jBIdentification;
    	}
     
    }  //  @jve:decl-index=0:visual-constraint="10,10"
    Voici mon main (généré en partie par Eclipse) :

    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
    public static void main(String[] args) {
    		// TODO Raccord de méthode auto-généré
    		
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				meteorologie thisClass = new meteorologie();
    				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				thisClass.setVisible(true);
    				Identification Ident_fen;
    				Ident_fen = new Identification();
    				Ident_fen.setVisible(true);
    				while(Ident_fen.droit==null){
    					
    				}
    				if(Ident_fen.droit=="admin"){
    					jTPOngletConfig.setVisible(true);
    				}
    				if(Ident_fen.droit=="user"){
    					jPUtilisateur.setVisible(true);
    				}
    			}
    		});		
    	}

    J'ai mis en rouge ce qui me pose problème. Depuis que j'ai mis ce test, la seule chose qui s'affiche, ce sont les cadres de mes classes, pas leurs contenues. Du coup l'identification, n'est même pas possible. Je ne vois pas comment regler ce soucis.

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par thanatos67
    while(Ident_fen.droit==null){
    }
    Ca, c'est pas terrible. En fait, tu bloques le thread de dispatch des evenements. Ce qui veut dire que tous les evenements (de redessin, appuie touche, etc ...) vont être empilés, en attendant la sortie de la boucle.

    Citation Envoyé par thanatos67
    if(Ident_fen.droit=="admin"){
    jTPOngletConfig.setVisible(true);
    }
    if(Ident_fen.droit=="user"){
    jPUtilisateur.setVisible(true);
    }
    Ecris plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(Ident_fen.droit.equals("admin")){
    jTPOngletConfig.setVisible(true);
    }
    ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Salut.

    J'ai effectué la modification en supprimant le "while" et en modifiant mon if, et j'ai un message d'erreur :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at stat_meteo.meteorologie$15.run(meteorologie.java:1519)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


    Ca semble venir de mon String droit qui est encore null lors du test (normal).
    Devrais-je utiliser des threads?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Moi je dirait pas forcement !!!

    Pourquoi tu as deux éléments différents !!!

    Je pense qu'il serait plus intéressant d'avoir un programme que lorsque tu te connecte tu rend ton onglet visible !!!

    Donc dans ta classe météorologie, tu cré une première interface de login (juste ca !!)
    Lorsque tu te logue, tu supprime cette interface et tu intègre la nouvelle (une des deux !!! en fonction du choix !!) [Attention, tu crée et non tu rend visible !!! => moins d'objet chargé !!!]
    Tes deux interfaces pourront même être deux classes différentes si elles étende des JFrame toutes les deux !!!


    Donc au final tu n'aura qu'une application avec un listener !!!

    Voila un point du vu qui est je pense différent de ce que tu voyait !!! A toi de voir !!!

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Dans ta classe identification, tu dois avoir un evenement qui valide la fin de la saisie du champ "droit". Par exemple, tu as pu mettre un bouton du genre "Valider", ou tu supposes que la saisie est valide lorsque l'utilisateur appuie sur "Entrée".
    Il faut que tu ajoutes un listener sur cette événement.
    Sur un bouton, cela donne quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton_valider.addActionListener(mon_listener);
    C'est dans ce listener que tu vas executer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    public void actionPerformed(ActionEvent event) {
      if(Ident_fen.droit.equals("admin")){
        jTPOngletConfig.setVisible(true);
      }
      if(Ident_fen.droit.equals("user")){
        jPUtilisateur.setVisible(true);
      }
    ...
    [EDIT] remplacement de == par .equals

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Salut.

    je suis d'accord avec toi, mais en faite je souhaite pouvoir utiliser ma cla Identification avec n'importe quelle classe.
    Du coup voiçi ce que je pense ecrire :

    public void actionPerformed(ActionEvent e){
    if(e.getSource()==Ident_fen.jBIdentification){
    droit=Ident_fen.droit;
    Ident_fen.setVisible(false);
    System.out.println("droit : " +droit);
    if(Ident_fen.droit=="admin"){
    jTPOngletConfig.setVisible(true);
    }
    if(Ident_fen.droit=="user"){
    jPUtilisateur.setVisible(true);
    }
    }
    }


    Est-ce que ça pourrait aller comme ça?

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ca pourrait, mais il vaut mieux eviter une ligne du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(e.getSource()==Ident_fen.jBIdentification){
    En fait ca suppose que ton listener va se comporter differement en fonction de la source. Dans ce cas, le mieux, c'est de faire deux listeners differents, c'est en général plus simple à comprendre.

    Remplace aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     if(Ident_fen.droit=="admin"){
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     if(Ident_fen.droit.equals"admin"){

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Salut.

    C'est bon, ça fonctionne. Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2011, 00h46
  2. problème de communication entre mes classes
    Par emiliekun dans le forum ActionScript 3
    Réponses: 13
    Dernier message: 19/08/2009, 14h10
  3. Réponses: 3
    Dernier message: 07/07/2008, 23h03
  4. [Tableaux] problème d'affichage de mes checkbox
    Par parko dans le forum Langage
    Réponses: 11
    Dernier message: 04/09/2007, 10h32
  5. ResX problème d'affichage de ma classe form
    Par matrix_ceg dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/03/2007, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo