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 :

paint ou paintComponents ?


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut paint ou paintComponents ?
    Bonjour à tous,

    dans mon application java ( Eclipse ), j'ai un formulaire avec des boutons ( 'nouveau', 'modifier',...).

    Pour définir leur aspect propre ( grisé ou non ), j'ai surchargé la methode paint( graphics g ) en pensant que le système appelait cette méthode

    'automatiquement' . Mais, j'ai du faire une erreur qqpart, car m^me en masquant mon panel par une autre fenêtre, la méthode paint n'est pas appelée ( journal log à l'appui)... .

    Quel est le problème ?

    ps : j'ai également essayé avec paintComponent, mais sans succès

  2. #2
    Membre confirmé Avatar de fabred
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2007
    Messages : 180
    Par défaut
    Tu peut nous montrez du code un peu que l'on puisse t'aider ?

  3. #3
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Voici ma méthode de rafraîchissement de mon panel de boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void paintComponent(Graphics g)
    {
    	super.paintComponent( g);
     
          //ici différent tests pour savoir si oui ou on le bouton 'nouveau' se grise ou        non
    	boolean enable = true ;
            if( ...) { enable = false ; }
     
    	nouveau.setEnabled( enable );
     
    }
    Apparemment, le système de passe dans cette méthode que si on l'appelle ( repaint ) ou si on masque la fenêtre par un autre composant.

  4. #4
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Par défaut
    pourquoi pas faire une mise a jour de ta frame; tu peut utiliser cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ta_farme.contentPane.updateUI();
    ceci permet de rapaint tout les conposant de ta frame

  5. #5
    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,

    Citation Envoyé par g0up1l
    Apparemment, le système de passe dans cette méthode que si on l'appelle ( repaint ) ou si on masque la fenêtre par un autre composant.
    Oui : c'est le comportement normal.

    Par contre je ne comprend pas pourquoi tu définit le comportement grisé des boutons manuellement dans la méthode paintComponent() !?!

    Pourrais-tu expliquer ce que tu veux faire précisément ?


    Citation Envoyé par anisj1m
    pourquoi pas faire une mise a jour de ta frame; tu peut utiliser cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ta_farme.contentPane.updateUI();
    ceci permet de rapaint tout les conposant de ta frame
    Un peu "bourrin" comme solution non ????


    a++

  6. #6
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Citation Envoyé par adiGuba

    Pourrais-tu expliquer ce que tu veux faire précisément ?


    a++
    Si tu veux, c'est une conception basée sur un mini-MVC intra-panel.

    En d'autres termes, si tu veux griser un bouton, ce n'est pas une action utilisateur qui va explicitement griser ton bouton ( et donc changer son aspect ) mais l'action utilisateur va simplement modifier une variable du panel ( que l'on peut qualifier de variable model ).

    Et donc au prochain redessin du panel, le système décide du grisage des différents boutons en 'observant' les différents variables du panel.

    Voila pourquoi j'ai mis ça dans 'paint' car je pensais que le système appelait cette fonction régulièrement. Mais apparemment non.

    En programmation Windows, le système envoie, dès qu'il n'a rien à faire, le message 'UpdateUI' qui permet de rafraîchir les composants.

  7. #7
    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
    Dans ce cas il faudrait appeler repaint() à chaque fois que cette "variable model" est modifié, c'est ce qui va entrainé la mise à jour de l'interface. Quand aux modifications de l'état des boutons, je le ferais également à chaque modification de la "variable model" plutôt que dans paintComponent()...

    Tu peux éventuellement mettre en place un mécanisme de listener pour cela (voir l'exemple de la FAQ : Comment créer son propre Listener ?).

    a++

  8. #8
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    ok merci

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

Discussions similaires

  1. [JPanel] paint, paintComponent et repaint ?
    Par Pill_S dans le forum Composants
    Réponses: 8
    Dernier message: 08/02/2013, 17h38
  2. Entre Paint et PaintComponent y a un truc que je pige pas?
    Par doul21 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 11/04/2008, 10h17
  3. [debutant][swing] pb dans un paintComponent
    Par tambourin dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 03/06/2004, 20h27
  4. [Paint][Color] determiner la couleur
    Par itsmii dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 27/05/2004, 13h15
  5. [TP]Paint en Pascal
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 17
    Dernier message: 03/12/2003, 22h35

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