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 :

Chaine d'appel de paint(), java.awt


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Par défaut Chaine d'appel de paint(), java.awt
    Bonjour, j'ai juste une petite question à propos de la chaine d'appel de paint() que fait le système.

    Si par exemple, on a un système de menu qui contiennent des boutons qui contiennent à leur tour des animations (tous des Container).
    Si chacune de ces classes ont une fonction paint() dans laquelle les dessins sont fait ainsi qu'un appel à super.paint().
    Est ce que pour mettre tout à jour, il faut appeler la fonction repaint() dans chacune des classes (menu, bouton, animation) ou alors un appel à repaint() dans l'animation suffit ?

    En gros ma question c'est, est ce que le système fait des appels de lui même à des paint() qui ne sont pas dans la classe de départ ou alors il ne redessine que l'objet appelant.

    Je pense qu'il remonte effectivement ces appels de lui même mais c'est pour être sur et je n'arrive pas à tester ca correctement.

    Est ce que l'inverse est vrai ? C'est à dire, est ce que si l'appel à repaint vient d'un composant père, il va être retransmis au composant fils.

    Si j'ai besoin de savoir ca, c'est par soucis d'optimisation afin d'effectuer le moins d'appel à paint() possible.

    Merci d'avance de votre aide.

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut Dessiner avec AWT
    Citation Envoyé par Cbonniot Voir le message
    on a un système de menu qui contiennent des boutons qui contiennent à leur tour des animations (tous des Container).
    Les composants légers sont dessinés de l'arrière plan vers l'avant plan, avec prise en charge de la transparence. Un "Container" doit faire appel à "super.paint" dans sa méthode "paint" pour permettre aux enfants légers de se dessiner. Quand notre programme appelle la méthode "repaint" sur un composant, le système remonte l'hiérarchie des composants pour trouver le composant-père lourd et redessine tous ce qui se trouve en dessous. Pour optimiser le processus de dessin, on peut utiliser la méthode "repaint" avec les arguments qui définissent le rectangle à redessiner et ne dessiner que ce qui chevauche le rectangle "clip" dans la méthode "paint" (Graphics#getClipBounds).

  3. #3
    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
    Pourquoi cherches tu à limiter les appels à paint?

    Si c'est car tu as des animations, alors tu as un problème de conception. Une animation ne doit pas être controlée en fonction des exécutions de paint, mais par rapport au temps.

    De fait il faut prendre en considération le fait que la méthode paint ne va s'occuper que des régions considérées comme dirty dans l'interface. C'est le rôle du repaintManager.

    Un peu de lecture: http://java.sun.com/products/jfc/tsc/articles/painting/

  4. #4
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Dans AWT, des "repaint" multiples peuvent être consolidés en un seul appel. Il y a donc déjà un automatisme en place permettant de réduire le nombre d'appels à la méthode "paint". Si on a besoin d'optimiser encore plus les composants avec affichage compliqué, c'est surtout à l'intérieur de la méthode "paint" qu'on peut le faire en ne dessinant que ce qui chevauche le rectangle "clip". Ceci suppose également l'emploi de la méthode "repaint" avec les arguments qui définissent le rectangle à redessiner.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Par défaut
    Bonjour, merci pour vos réponses.

    J'utilise effectivement la fonction repaint uniquement sur le rectangle qui m'interesse. Mes animations ne se font pas par rapport à paint mais elles appellent paint lorsqu'elles changent, elles sont donc dépendante du temps.

    La raison pour laquelle je veux limiter les appels à paint, c'est parce que je travaille sur des platines de lecture Blu-Ray et qu'elles n'ont pas toutes les mêmes performances et certaines d'entres elles ne peuvent pas afficher suffisamment rapidement ce que je veux et alors j'obtiens des clignotements (j'utilise le double buffering). Je voulais donc savoir a quel endroit je devais appeler repaint pour être sur que tout ce que je veux soit redessiner et en même temps ne faire qu'un appel.


    J'avais déja lu ce lien, il est très bien merci.

    Donc si je fais l'appel depuis le composant père lourd ca fonctionne mais si c'est le composant père léger ?

    Si je pose la question ce n'est pas parce que j'ai la flemme d'essayer, c'est parce que les lecteurs ne réagissent pas tous de la même manière (du fait qu'ils ne suivent pas tous la norme de la même manière) et donc j'ai besoin d'être sûr que la méthode est bonne.

    Merci.

  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
    Le truc c'est que tes animations elles déclenchent l'appel à paint, ce qui est le problème.

    Le concept de base est que l'appel à paint devrait être fait de fonction régulière (toutes les X millisecondes) et que les animations ne fassent que préparer les éléments du paint en fonction d'une Timeline. Donc qu'il y ait une désynchronisation entre les animations et l'exécution du paint. Le truc qu'il faut c'est que l'animation sache quoi dessiner en fonction d'un temps. C'est à dire qu'à un moment T donné l'animation sache exactement à quelle position et de quelle couleur elle doit dessiner par exemple. Donc un code en fonction d'un intervalle de temps.

    En procédant de cette façon celà te permet de garder un taux de repaint constant tout en ayant plusieurs animations tournant en parallèle.

    Pour bien faire, il faut que les animations ne soient pas responsables de l'appel à paint, mais que l'appel à paint soit régulé au niveau du temps.

Discussions similaires

  1. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 13h21
  2. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 13h04
  3. [Applet] appel de methodes java en javascript
    Par soulhouf dans le forum Applets
    Réponses: 16
    Dernier message: 06/09/2005, 15h18
  4. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 16h46
  5. Unité Delphi appelée à partir de JAVA
    Par babaahmed dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/04/2003, 11h51

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