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

Composants Java Discussion :

Probleme de repaint de JMenuBar


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Par défaut Probleme de repaint de JMenuBar
    Bonjour,

    J'initialise une JMenuBar avec des items spécifique à l'utilisateur connecté. Or, lorsque l'utilisateur veut se delogger, je recalcule les éléments a afficher dans le cas où personne n'est connecté, et j'ai une erreur d'affichage: le menu sur lequel l'utilisateur vient de cliquer pour se deconnecter est "enclenché", mais aucun item n'est affiché + freeze (un bug quoi)
    Mais aucune stacktrace dans mon Eclipse.

    De plus, lorsque je resize ma fenetre (maximise, ou simplement agrandis/rétrécis), le menu est affiché correctement, avec els bons items. Si je la deplace simplement, le menu reste buggé.

    Un appel a jmenuBar.repaint() ne change rien.

    Là où c'est intrigant, c'est que sous les look and feel Nimbus et Motif (je suis en java 1.6_10), je n'ai pas ce probleme. Seuls Metal et Windows Look and Feel se comportent comme ca.
    Une idée sur ce qui se passe ?

  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,

    Respectes-tu ces deux règles :
    • Toute modification sur un composant graphique doit se faire dans l'EDT.
    • L'ajout/suppression de composant d'un conteneur visible doit être suivi d'un appel à revalidate(), afin que le LayoutManager puisse recalculer les positions de chaque éléments...


    Car sinon tu encoures des bugs aléatoires qui peuvent dépendre de plein de chose (de la JVM, du système hôte, du LnF, ...)

    a++

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Par défaut
    Super, en effet il fallait que je "revalidate()" ma jmenubar

    J'ai pas compris ce que tu entendais par EDT mais le revalidate() a réglé le probleme

    Merci pour la rapidité et l'efficacité, adiGuba

    EDIT:
    Comme chaque développeur Swing le sait (ou devrait le savoir), Swing utilise un thread dédié, l'Event-Dispatching Thread (EDT), qui s'occupe à la fois de mettre à jour l'affichage et de traiter les différents évènements de l'application. Ainsi, toutes les actions que l'utilisateur effectuera via l'interface graphique (clic de souris, raccourci-clavier, etc...) seront exécuté dans ce thread.
    Maintenant je le sais

  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
    AWT/Swing sont mono-threadé et l'EDT correspond au thread qui gère l'affichage et les événements. Toutes les modifs sur l'interface devraient être effectuées dans ce thread.

    Les listeners sont exécuté par l'EDT donc si tu fais tes modifs là dedans pas de problème. Par contre si tu fais des modifs depuis un autre thread tu pourrais avoir des petits soucis difficilement détectable et difficilement reproductible car trop aléatoire...


    Tu trouveras des infos sur le forum ou dans les cours & tutoriels Java, comme celui-ci par exemple : http://gfx.developpez.com/tutoriel/j...ing-threading/


    a++

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

Discussions similaires

  1. Probleme avec repaint()
    Par LinuxUser dans le forum AWT/Swing
    Réponses: 15
    Dernier message: 02/01/2008, 01h04
  2. Probleme de Repaint
    Par beuhnoix dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/11/2007, 16h28
  3. Probleme de ressource CPu suite à un repaint
    Par cactus13 dans le forum 2D
    Réponses: 3
    Dernier message: 20/10/2007, 01h51
  4. Probleme paint() repaint()
    Par Uren dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/07/2007, 19h02
  5. Probleme methode repaint()
    Par cybercrisp dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 25/10/2006, 00h21

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