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 :

Aide en IHM ! Les fenêtres


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut Aide en IHM ! Les fenêtres
    Ayant creer 2 fenêtres en IHM, Je veut veut recupérer la variable 'text' d'un TextField dans la 1ère fenêtre et l'afficher dans un Label de la 2ème
    fenètre!
    Le problème est que la première saisie dans 'text' n'affiche pas immédiatement son contenu dans le Label dans la 2ème fenêtre; il l'affiche avec un décalage....
    du genre:
    saisie N°1("Paul") Affiche Null
    saisie N°2("Pière") Affiche Paul
    saisie N°3("Jean") Affiche Pièrre
    ...
    or ce que je veux c'est:
    saisie N°1("Paul") Affiche Paul
    saisie N°2("Pière") Affiche Pièrre
    saisie N°3("Jean") Affiche Jean
    ...

    voici mon code
    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
     
    //fenètre 1
    public class Prog1 extends JFrame implements ActionListener {
    public JTextField text;
    public JLabel label;
    public JPanel A;
    public JButton bok;
     
    public Prog1() 
    {
        super("Page 1");
        A = new JPanel();
        A.add(label = new JLabel("Quel eest votre nom ? "));
        A.add(text = new JTextField(20));
        A.add(bok = new JButton("OK"));
        bok.addActionListener(this);
        this.add(A);
        this.pack();
    }
    public void actionPerformed(ActionEvent e)
    {
        Prog2 prg2 = new Prog2();
        if(e.getSource() == bok)
        {
            prg2.utile = text.getText().toString();
            this.setVisible(false);
            prg2.show();
        }
    }
        public static void main(String[] args) {
     
            Prog1 prg = new Prog1();
            prg.setVisible(true);
        }
    }
    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
     
    //fenètre 2
    public class Prog2 extends JFrame implements ActionListener {
     
        public JLabel label;
        public JPanel B;
        public JButton retour;
        public static String utile;
     
        public Prog2()
        {
            super("Page 2");
            B = new JPanel();
            B.add(label = new JLabel("Bonjour "+utile+" !"));
            B.add(retour = new JButton("Retour"));
            retour.addActionListener(this);
            this.add(B);
            this.pack();
        }
        public void actionPerformed(ActionEvent e)
        {
            Prog1 prg = new Prog1();
            if(e.getSource() == retour)
            {
                this.setVisible(false);
                prg.show();
            }
        }
    }
    comment puis-je corriger se probleme ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ordre d'exécution (de lignes sélectionnées pour la démonstration) :

    1. On saisit "Paul", on clique sur le bouton dans la fenêtre 1, donc Prog2 prg2 = new Prog2();
    2. ce qui provoque B.add(label = new JLabel("Bonjour "+utile+" !"));.
      A ce moment, utile vaut null, donc le label affiche null
    3. S'exécute prg2.utile = text.getText().toString();. utile vaut donc maintenant "Paul" (au passage getText() c'est du String, pas la peine donc de le transformer en String : l'appel de toString() est superflu.
    4. On clique sur le bouton de la fenêtre 2
    5. On saisit "Pierre", on clique sur le bouton dans la fenêtre 1, donc Prog2 prg2 = new Prog2();
    6. ce qui provoque B.add(label = new JLabel("Bonjour "+utile+" !"));.
      A ce moment, utile vaut "Paul" (parce que utile est static, c'est la même variable/valeur dans la nouvelle instance de Prog2, donc le label affiche "Paul"
    7. S'exécute prg2.utile = text.getText().toString();. utile vaut donc maintenant "Pierre"


    En résumé, tu affectes la variable utile trop tard, après l'affectation de sa valeur au JLabel. Soit tu l'affectes avant, soit tu affectes directement le label (par prg2.label.setText("Bonjour " + text.getText().); (mais bon, les attributs ne devraient pas être public donc solution pas top). Mais la meilleure façon de faire est encore de passer la valeur en paramètre (du constructeur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public JLabel label;
        public JPanel B;
        public JButton retour;
     
        public Prog2(String utile) {
            super("Page 2");
            B = new JPanel();
            B.add(label = new JLabel("Bonjour "+utile+" !"));
            B.add(retour = new JButton("Retour"));
            retour.addActionListener(this);
            this.add(B);
            this.pack();
        }
    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Prog2 prg2 = new Prog2(text.getText());
    ou par une méthode :

    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
    public JLabel label;
        public JPanel B;
        public JButton retour;
     
        public Prog2(String utile) {
            super("Page 2");
            B = new JPanel();
            B.add(label = new JLabel("Bonjour "+utile+" !"));
            B.add(retour = new JButton("Retour"));
            retour.addActionListener(this);
            this.add(B);
            this.pack();
        }
     
        public void setNom(String utile) {
            label.setText("Bonjour "+utile+" !");
        }
    NB setVisible(false) ça rend la fenêtre non visible, ça ne la ferme pas, elle est toujours là, mais on ne la voit pas. Donc après avoir exécuté ta séquence de test, tu auras 6 fenêtres en mémoire, dont une ouverte. Pour fermer une fenêtre on utilise dispose(). Et au passage, show() est dépréciée, on utile plutôt setVisible(true).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    merci pour l'aide
    et surtout pour les utiles petites remarques !!!

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut Problèm d'enregistrement des données dans Mysql !!
    voulant améliorer le code ci dessus , j'ai ajouter une insertion dans une table test(num,nom,valeur) de ma base mysql nommée Test
    Mais ça debouche toujours sur l'exception: //catch(SQLException c)
    quelqu'un a t'il une solution?

    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
     
     public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == bok)
            {
                /** insertion base de données  **/
                Connection con = null;
     
                try {
                    con = connecter(); 
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(Prog1.class.getName()).log(Level.SEVERE, null, ex);
                }  
                    if(con == null)
                    {
                        return ;
                    }
                    else
                    {
                         try
                        {
                            Statement st = con.createStatement();
                             String rq = "INSERT INTO test ('num', 'nom', 'valeur') VALUES ('', '"+text.getText()+"', '"+text2.getText()+"')";
                            st.executeUpdate(rq);
                            Prog2 prg2 = new Prog2(text.getText());
                            this.setVisible(false);
                            this.dispose();
                            prg2.setVisible(true);
                        }
                        catch(SQLException c)
                         {
                            JOptionPane.showMessageDialog(this,"Erreur Survennue! \n Veillez Ressayer !!!");
                         }
                    }
                /*-------------------------------*/
            }
        }
    je desire surout un document qui traite de ces genres de manipulations de façon generale
    (insertion, suppression , recherche, affichage dans un table) d'une base mysql à travers un ihm!!
    thanks!

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il est important de savoir le message d'erreur (savoir que c'est une SQLException n'est pas suffisant).

    Au sujet du Statement, je te conseille d'utiliser plutôt un PreparedStatement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    Je veux dire que c'est les catch(SQLException c) de la ligne 30 du code qui est exécuter au lieu du try précedent !!!
    et je veux comprendre ce qui ne va pas!!

    je desire aussi une indication d'un document qui traite de ces genres de manipulations de façon generale
    (insertion, suppression , recherche, affichage dans un table) d'une base mysql à travers un ihm!!
    thanks!

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Toogda Voir le message
    Je veux dire que c'est les catch(SQLException c) de la ligne 30 du code qui est exécuter au lieu du try précedent !!!
    et je veux comprendre ce qui ne va pas!!
    Et moi je veux dire que si tu n'affiches pas le message d'erreur tu ne pourras pas comprendre ce qui ne va pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    catch(SQLException c) {
    String error = "SQLState: " + c.getSQLState() 
                         + "\nError Code: " + c.getErrorCode() 
                         + "\nMessage: " + e.getMessage();
                            JOptionPane.showMessageDialog(this,"Erreur Survenue !\nVeuillez réessayer !!!\n\n"+error, "Erreur", JOptionPane.ERROR_MESSAGE);
                         }
    Et que tu auras moins de risque d'erreur si tu utilises des PreparedStatement (notamment au sujet de la gestion des quotes).

    Citation Envoyé par Toogda Voir le message
    je desire aussi une indication d'un document qui traite de ces genres de manipulations de façon generale
    (insertion, suppression , recherche, affichage dans un table) d'une base mysql à travers un ihm!!
    Pour ça, il va falloir que tu cherches dans les tutoriels sur Developpez et sur le net, parce que je n'ai pas ça en magasin.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    l'utilisation de PrepareStatament comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PreparedStatement st = (PreparedStatement) con.createStatement();
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Statement st = con.createStatement();
    sigal une erreur!!



    et l'erreur sql generée pour l'exception du code ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    catch(SQLException c)
                         {
                            String error = "SQLState: " + c.getSQLState() 
                         + "\nError Code: " + c.getErrorCode() 
                         + "\nMessage: " + c.getMessage();
                            JOptionPane.showMessageDialog(this,"Erreur Survenue !\nVeuillez réessayer !!!\n\n"+error, "Erreur", JOptionPane.ERROR_MESSAGE);
                         }
    estNom : error1.PNG
Affichages : 200
Taille : 8,9 Ko

    Comment puis-je le corrigé?

    Un autre souci:
    j'ai aussi un problème de redimensionnement d'une image d’ion d'un JMenuItem ():
    c-à-d:
    quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item1.setIcon(new ImageIcon(getClass().getResource("/img/ajou1.jpg")));
    l'image s'affiche mais est trop grand.
    donc je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item1.setIcon(new ImageIcon(new ImageIcon("/img/ajou1.jpg").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)));
    Mais ça ne signal pas d'erreur mais l'image ne s'affiche plus.
    comment corigé?
    merci.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Toogda Voir le message
    l'utilisation de PrepareStatament comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PreparedStatement st = (PreparedStatement) con.createStatement();
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Statement st = con.createStatement();
    sigal une erreur!!
    Parce que c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PreparedStatement st = con.prepareStatement( ta requête paramétrée ici );
    La requête paramétrée, c'est un SQL où les parties paramétrées sont des ?. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PreparedStatement st = con.prepareStatement("INSERT INTO test (nom, valeur)
    VALUES (?, ?");
    st.setString(1, text.getText());
    st.setString(2, text2.getText());
    Attention à ta propriété num : est-elle automatiquement gérée par une séquence, ou dois-tu la renseigner ? Quel est son type ?

    Citation Envoyé par Toogda Voir le message
    et l'erreur sql Nom : error1.PNG
Affichages : 200
Taille : 8,9 Ko

    Comment puis-je le corrigé?
    A priori, je pense que ce sont les quotes autour des noms de colonnes.

    Citation Envoyé par Toogda Voir le message
    Un autre souci:
    j'ai aussi un problème de redimensionnement d'une image d’ion d'un JMenuItem ():
    c-à-d:
    quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item1.setIcon(new ImageIcon(getClass().getResource("/img/ajou1.jpg")));
    l'image s'affiche mais est trop grand.
    donc je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item1.setIcon(new ImageIcon(new ImageIcon("/img/ajou1.jpg").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)));
    Mais ça ne signal pas d'erreur mais l'image ne s'affiche plus.
    comment corigé?
    merci.
    ImageIcon charge l'image en asynchrone. Je pense que le problème vient de là. Quand tu exécutes le getImage(), l'image n'est pas encore chargée, donc sa "scaled image" est une image "vide".
    Soit tu utilises ImageIO pour charger ton image (en synchrone donc), soit tu utilises un imageobserver sur l'image pour réagir au chargement (plus complexe).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    j'ai pu regler le souci ducoté sql. Merci!

    Maintenant; j'ai pas trouver grand chose sur la syntaxe d'utilisation de ImageIO et de ImageObserver!!!
    y'a-t-li une possiblité de manipuler l'objet ImageIcon en Netbeans avec la palette dans l'onglet Design.
    cordialement!!!

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

Discussions similaires

  1. Problème avec les fenêtres d'aides
    Par seb49 dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 01/02/2010, 13h37
  2. Réduire les fenêtres sur un seul moniteur : possible ?
    Par mat087 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 08/11/2005, 00h35
  3. Masquer ou détruire les fenêtres ?
    Par Azharis dans le forum MFC
    Réponses: 1
    Dernier message: 06/11/2005, 18h41
  4. Réponses: 1
    Dernier message: 26/02/2005, 12h55
  5. Manipuler les fenêtre d'un shell en c
    Par Gential dans le forum C
    Réponses: 2
    Dernier message: 24/10/2003, 09h04

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