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 de rafraîchissement / Mise a jour JLabel ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut Problème de rafraîchissement / Mise a jour JLabel ?
    Bonjour bonjour,

    Dans mon application, la première fois que j'appelle la méthode qui va m'afficher les datas dans les JLabels, cela fonctionne.

    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
        @Override
        public void lireQuestionDansIhm(T_Question q) {
     
            if (q == null) {
                System.out.println("Y U DON'T SHOW URSELF ???" + q);
     
            } else {
                System.out.println(jLabel_Qnumber);
                if (jLabel_Qnumber == null) {
                    jLabel_Qnumber = new JLabel();
                }
                if (jLabel_question == null) {
                    jLabel_question = new JLabel();
                }
                jLabel_Qnumber.validate();
                jLabel_question.validate();
                jLabel_Qnumber.setText(q.getNumber().toString());
                jLabel_question.setText(q.getQuestion());
                jLabel_Qnumber.revalidate();
                jLabel_question.revalidate();
                System.out.println(" q : " + q.getQuestion());
                System.out.println("JLabel_QNumber.getText() " + jLabel_Qnumber.getText());
                System.out.println("JLabel_question.getText() " + jLabel_question.getText());
            }
        }
    Cependant, lorsque j'appelle cette methode depuis un certain listener, je suis obligé de ré instancier les labels, autrement j'ai un NullPointer.

    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
        @Override
        public void lireNextQuestionDansIhm(T_Question q) {
            JLabel jLabel_Qnumber = new JLabel();
            JLabel jLabel_question = new JLabel();
            if (q == null) {
                System.out.println("Y U DON'T SHOW URSELF ???" + q);
            } else {
                String sq = q.getQuestion();
                String sPk = q.getPKquestion().toString();
                //jLabel_Qnumber.setText(sPk);
                //jLabel_question.setText(sq);
                lireQuestionDansIhm(q);
                System.out.println(sq + " et pk_q = " + sPk);
            }
        }
    Et pourtant ...



    Les JLabels restent avec la première série de datas et ne veulent pas changer visuellement, pourtant si on utilise la méthode getText() on peut bel et bien voir que la PK numéro 2 ainsi que la question correspondante devrait être afficher.

    Ah et pour les méthodes validate et revalidate c'était juste pour tester si cela rafraîchissait vraiment.

    Cordialement,

    RetributionX

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Si tu redimensionne ta fenêtre la bonne valeur s'affiche ?
    Essaye un invalidate/validate sur la JFrame.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Salut Mathieu,

    Merci pour ta réponse rapide,

    Rien ne change lorsque je redimensionne (manuellement) la fenêtre.
    J'ai fait un invalidate / validate sur le jPanel contenant les jLabels.
    Par contre pour la jFrame je ne sais pas comment faire ? y a t'il un moyen de récupérer la jFrame comme une autre variable ?

    mon code ressemble à ça maintenant :

    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
        @Override
        public void lireQuestionDansIhm(T_Question q) {
     
            if (q == null) {
                System.out.println("Y U DON'T SHOW URSELF ???" + q);
     
            } else {
     
                if (jLabel_Qnumber == null || jLabel_question == null || jPanel2 == null) {
                    jLabel_Qnumber = new JLabel();
                    jLabel_question = new JLabel();
                    jPanel2 = new JPanel();
                }
                jPanel2.invalidate();
                jLabel_Qnumber.setText(q.getNumber().toString());
                jLabel_question.setText(q.getQuestion());
                jPanel2.validate();
                System.out.println(" q : " + q.getQuestion());
                System.out.println("JLabel_QNumber.getText() " + jLabel_Qnumber.getText());
                System.out.println("JLabel_question.getText() " + jLabel_question.getText());
            }
        }
    Resultat afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    questionsL size: 3 selectedIndex: 1
     q : How much is 2+2 ?
    JLabel_QNumber.getText() 2
    JLabel_question.getText() How much is 2+2 ?
    How much is 2+2 ? et pk_q = 2
    Mais dans l'UI la première question que tu peux voir sur l'image que j'ai posté reste ...

    La methode repaint ne marche pas non plus.

    Est-ce plutôt un problème de "gestion des variables" ? Je suis obligé d'instancier mes labels et mon panel lorsque j'appelle la méthode lireQuestionDansIhm(T_Question q) depuis LireNextQuestionDansIhm(T_Question q).

    Je dois avouer que je trouve ce problème un peu louche

    Merci de votre soutien.

    RetributionX

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Si tu réinstancies tes JLabel, ce sont de nouveaux objets, il faut donc les ajouter au conteneur, sinon, vu que le conteneur ne les connait pas (il possède encore la référence sur les anciens JLabel), il ne les affichera pas.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Salut Sinok,

    Merci pour tes instructions.
    Je les ai suivi, mais rien n'y fait. Le label reste figé.
    Mon code ressemble maintenant à ça :

    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
      @Override
        public void lireQuestionDansIhm(T_Question q) {
     
            if (q == null) {
                System.out.println("Y U DON'T SHOW URSELF ???" + q);
     
            } else {
     
                if (jLabel_Qnumber == null || jLabel_question == null || jPanel2 == null) {
                    jPanel2 = new JPanel();
                    jLabel_Qnumber = new JLabel();
                    jLabel_question = new JLabel();
                    jPanel2.add(jLabel_Qnumber);
                    jPanel2.add(jLabel_question);
                }
     
                jPanel2.invalidate();
                jLabel_Qnumber.invalidate();
                jLabel_question.invalidate();
     
                jLabel_Qnumber.setText(q.getNumber().toString());
                jLabel_question.setText(q.getQuestion());
     
                jPanel2.validate();
                jLabel_Qnumber.validate();
                jLabel_question.validate();
     
                System.out.println(" q : " + q.getQuestion());
                System.out.println("JLabel_QNumber.getText() " + jLabel_Qnumber.getText());
                System.out.println("JLabel_question.getText() " + jLabel_question.getText());
            }
        }
    Sinok, est-ce normal que je doive ré instancier les Labels alors qu'ils ne sont pas null ? Si je ne le fait pas on m'affiche un NullPointerException. Pourtant si mon label est afficher et rempli avec les infos de ma database, il n'est pas null non -.- ?

    Merci encore,

    RetributionX

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah, le problème est le même, c'est juste que ce ne sont plus tes JLabel mais ton JPanel qui n'est ajouté nulle part...

    Et si tu as des NullPointerException, c'est qu'un de ces objets, au moins, est null. Il n'y a pas d'autre explication.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut Problème résolu
    Bonjour à toutes et tous,

    J'ai résolu le problème en le contournant de manière à ne pas avoir à ré instancier tout mes labels / Panel / Frame

    Voici la solution :

    D'abord on lance le listener en appuyant "Enter" dans le Password Field :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
     
            jPasswordField1.addKeyListener(ihm);
            char[] pwdField = jPasswordField1.getPassword();
            monTextField = pwdField.toString();
            compare = new String(pwdField);
     
            System.out.println("JCombobox.getSelectedItem in JPasswordField1ActionPerformed is : " + lenovo);
            T_Question nextquestion = refCtrl.checkPwd(pKCurrentAnswer1, compare);
            lireQuestionDansIhm(nextquestion);
            refCtrl.BeginNext(pKCurrentAnswer1);
     
            jPasswordField1.setVisible(false);
        }
    Qui pars vérifier dans le Ctrl puis dans le model si le mdp saisie et bien égal au mdp actuelle de la BD.

    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
        @Override
        public T_Question checkPwd(int pKCurrentAnswer1, String compare) {
            model.setQuestion(wrkQues.chargerListe());
     
            boolean answerOk = model.checkRep(model.currentPassword(), compare);
            if (answerOk == true) {
                System.out.println("Ctrl CheckPwd ok = true");
                T_Question nextquestion = model.questionSuivante(pKCurrentAnswer1);
                refQuizz.showPro();
                return nextquestion;
            } else {
                refQuizz.showFail();
            }
            System.out.println("Ctrl CheckPwd, q = null");
            return null;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public boolean checkRep(T_Password pwd, String monTextField) {
            boolean ok = false;
            System.out.println("asw courante : " + pwd.getPassword() + " checkpoint number is : " + pwd.getCheckpointNumber() + " mdp entré " + monTextField);
            if (pwd.getPassword().equals(monTextField)) {
                ok = true;
            } else {
                System.out.println(" Fail => pwd.getPassword().equals(monTextField)" + pwd.getPassword() + " " + monTextField);
            }
            return ok;
        }
    Et enfin on affiche la question :

    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
        @Override
        public void lireQuestionDansIhm(T_Question q) {
     
            if (q == null) {
                System.out.println("Y U DON'T SHOW URSELF ???" + q);
            } else {
                jLabel_question.setText(q.getQuestion());
                jLabel_Qnumber.setText(q.getNumber().toString());
     
                System.out.println("repaint done");
                jLabel_question.setText(q.getQuestion());
                jLabel_Qnumber.setText(q.getNumber().toString());
     
     
                System.out.println(" q : " + q.getQuestion());
                System.out.println("JLabel_QNumber.getText() " + jLabel_Qnumber.getText());
                System.out.println("JLabel_question.getText() " + jLabel_question.getText());
            }
        }
    Merci pour votre aide, je passe à la suite sans tarder !

    Cordialement, RetributionX

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

Discussions similaires

  1. Problème SQL SAGE Mise à jour
    Par yancimer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2006, 21h35
  2. Problème récurrent de mise à jour
    Par r@phy dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 13h19
  3. Problème d'une mise à jour
    Par Hamdi dans le forum Access
    Réponses: 2
    Dernier message: 17/09/2005, 13h57
  4. [DLL] Problèmes d'accès et de mise a jour du fichier
    Par Clorish dans le forum Langage
    Réponses: 14
    Dernier message: 27/06/2005, 14h28
  5. problème de mise a jour
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 15/04/2004, 16h09

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