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 :

Process de rafraichissement d'une interface


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut Process de rafraichissement d'une interface
    Bonjour,

    Ca ne me ressemble pas, mais je reviens m'en remettre à vos compétences, je me suis arraché les cheveux toute la nuit pour essayer de comprendre ce qui ne va pas dans mon code... Il faut croire qu'on ne nous apprend rien en cours... Ou du moins, très mal.

    J'ai un élément d'interface (un JPanel) qui écoute une instance d'une classe de données, un Personnage. Cet élément possède un JTextField lui même écouté par une autre classe, le Contrôleur. Lorsque ce JTextField est modifié (keyReleased()), le controleur demande la modification du personnage, qui à son tour, demande la mise à jour de ses écouteurs (le JPanel, celui-ci met ensuite à jour le texte de plusieurs Label qui lui appartiennent).

    Le process en lui même fonctionne, j'ai bien une mise à jour qui s'effectue, seulement au niveau graphique, je me retrouve avec des choses plutôt étranges. Les Label modifiés ne ressemblent plus à grand chose. J'ai bien essayé un repaint(), mais c'est encore pire, et je n'arrive pas a comprendre pourquoi (lors du repaint, j'ai carrément d'autres éléments qui se retrouvent dédoublés dans un coin du panel). Un revalidate() ne fonctionne pas non plus, il ne change rien.

    Voici mon code, sans le personnage qui n'aurait à mon avis que peu d'intérêt ici, mon évènement étant correctement généré.

    Je peux ajouter une copie d'écran si vous le désirez, merci d'avance, vous pouvez sauver les quelques cheveux qu'il me reste...



    Dernière minute : une idée m'est venue Je me suis dit qu'il y avait certainement quelque chose que je n'avais pas bien compris dans le process de rafraichissement des fenêtres/éléments en JAVA... (il m'a quand même fallu quelques heures...) J'ai donc ajouté, en lieu et place du duo revalidate/repaint, un simple setVisible(false);setVisible(true); ... Et ca fonctionne Ca ne me satisfait pas en revanche pour plusieurs raisons. J'en déduis donc qu'il me manque quelque chose pour effectuer le rafraichissement dans les rêgles du lard. Donc mon nouveau problème : connaissez-vous une bonne documentation sur ce point précis, en français si possible (C'est quand même un peu technique donc... N'allons pas risquer de comprendre de travers ). Ou mieux : quelqu'un aurait quelques minutes a perdre pour m'expliquer ce que j'ai raté? Rien qu'un nom, que je trouve sur google


    Merci ^^

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Pour les composants Swing, il ne faut pas redéfinir paint() mais paintComponent() et ne pas appeler explicitement paintChildren() !

    De même évites de charger l'image dans la méthode de dessin...

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    Merci de t'intéresser à mon problème

    J'ai bien noté le soucis du paintComponent(), penses-tu que cela puisse être la cause de l'affichage buggué? Je vais tester.

    Quand à l'appel à paintChildren(), apparemment les enfants sont dessinés avant l'appel à paint(), du coup je ne vois plus aucun composant après avoir dessiné le fond. Je suis donc obligé de les redessiner. Je pourrais me passer de cette façon de faire si je trouvais un autre moyen d'ajouter un fond à mon panel, mais pour l'instant mes recherches ne donnent rien. Que me conseille-tu?


    Edit : après vérification, si j'appelle paintComponent(), je peux effectivement me passer de l'appel a paintChildren(). Toutefois mon problème empire, car même l'appel à setVisible(false);setVisible(true); ne corrige plus l'affichage buggué...

    La meilleure chose à faire serait, comme tu me le conseille, de dessiner mon fond d'une autre manière, seulement je ne vois pas comment... Une piste? (sachant en plus que j'ai plusieurs images qui se chevauchent, dont certaines contiennent des parties transparentes)

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ximenjun Voir le message
    Edit : après vérification, si j'appelle paintComponent(), je peux effectivement me passer de l'appel a paintChildren(). Toutefois mon problème empire, car même l'appel à setVisible(false);setVisible(true); ne corrige plus l'affichage buggué...
    Disons que je trouve aberrant de devoir faire des setVisible(false/true) !

    Tu dois avoir un autre problème quelque part !

    Maintenant, pour en revenir à ton problème, c'est difficile de t'aider avec si peu de code : on ne sait même pas comment tu ajoutes tes composants au panel !

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    Disons que je trouve aberrant de devoir faire des setVisible(false/true) !
    C'est sur et comme je l'ai dit, ca ne me satisfait pas, mais dans une optique de debug ca a le mérite de marcher et de montrer que quelque chose change entre les deux méthodes.

    J'édite mon premier post pour ajouter le code restant. J'ai quand même volontairement réduit le tout, je peux tout mettre si tu le souhaite mais ca va faire lourd...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    J'ai résolu mon problème en effectuant mes repaint() sur ma JFrame plutot que sur chaque composants, indépendamment. J'ai quand même du mal à comprendre pourquoi, lorsque j'apelle repaint() sur un de mes panel, il dessine son fond et y ajoute le fond d'autres panels qui ne lui appartiennent pas (panels de même niveau dans ma JFrame). Y'a-t-il une rêgle en swing qui stipule de n'appeller repaint() que pour le composant principal?

    Je ne met pas le TAG résolu pour l'instant, n'ayant pas encore trouvé de réponse à ce problème...

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

Discussions similaires

  1. Problème de rafraichissement d'une interface SWT
    Par franckB dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 20/02/2008, 15h43
  2. Comment faire une interface de ce type....
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/04/2007, 13h50
  3. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02
  4. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59
  5. portabilité d'une interface
    Par marou dans le forum JBuilder
    Réponses: 4
    Dernier message: 21/03/2003, 08h53

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