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

2D Java Discussion :

superposition de JPanels pour accélérer l'affichage


Sujet :

2D 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
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Par défaut superposition de JPanels pour accélérer l'affichage
    Bonjour,
    voilà la question que je me pose sans trop savoir si c'est une technique valide et intéressante :
    Dans mon Jpanel j'ai un dessin de fond, fixe la plupart du temps, qui est affiché par paintComponent et qui nécessite un temps non négligeable de traitement. Sur ce dessin s'affiche un autre dessin qui est mis à jour régulièrement. Il est aussi affiché par paintComponent, à la suite du premier dessin. Je voudrais éviter de mettre à jour inutilement le premier dessin de fond (pour gagner du temps) quand le second est mis à jour. Pour cela j'ai eu l'idée de superposer deux Jpanels en les mettant dans le contentPane et en faisant contentPane.setLayout(new CardLayout()); puis en rendant le deuxième Jpanel transparent pour voir le premier en dessous qui affichera l'image fixe. Le deuxième Jpanel est destiné à contenir le dessin régulièrement mis à jour.
    Donc Je pourrai ensuite appeler le paintComponent() du second JPanel pour mettre à jour uniquement celui-ci. J'évite ainsi la mise à jour inutile du premier JPanel qui contient mon dessin fixe.
    Alors ? Est-ce correct ? Est-ce une technique satisfaisante ? Et d'abord, est-ce possible ? Et sinon, comment faire pour éviter la mise à jour inutile de mon dessin de fond ?
    Merci beaucoup pour votre réponse.

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354

  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par Virgile le chat Voir le message
    Dans mon Jpanel j'ai un dessin de fond, fixe
    c'est quoi exactement ? une image ou un dessin avec des forme 2D ajouter avec des drawXXX() ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le fait de superposer des JPanel n'y changera rien. Quand un zone devra etre redessinée, tout les panel occupant cette zone devront redessiner. Le plus simple est de dessiner ton image de fond sur un bufferedimage et d'utiliser celui-ci pour dessiner ton panel.

  5. #5
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Le fait de superposer des JPanel n'y changera rien. Quand un zone devra etre redessinée, tout les panel occupant cette zone devront redessiner.
    effectivement


    Citation Envoyé par tchize_ Voir le message
    Le plus simple est de dessiner ton image de fond sur un bufferedimage et d'utiliser celui-ci pour dessiner ton panel.
    mais si son JPanel permet le dessin de formes 2D suite des actions souris (dragg ,déplacement ..) je pense que sa sera pas le cas

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par slim_java Voir le message
    effectivement
    mais si son JPanel permet le dessin de formes 2D suite des actions souris (dragg ,déplacement ..) je pense que sa sera pas le cas
    Aucun rapport. Il faut savoir decoupler le rendu de son affichage, qu'il dessine dans une image ou sur le panel meme, le seul truc important c'est qu'il dessine dans un Graphics.

    Comme indique plusieurs fois dans ces forums (merci faire des recherches avant de poster), les manieres d'accelerer un rendu sont :
    • Utiliser des images offscreen compatibles , tres utile lorsque le contenu des image ne change pas souvent (composer l'image a l'ecran est plus rapide que de redessiner tout son contenu) ou pour utiliser certains effets et certaines composites qui fonctionnent mal sur le Graphics de l'ecran (car ce dernier est toujours opaque et contient deja des choses). Mais en contrepartie on bouffe plus de memoire.
    • Appeler repaint() uniquement sur la(les) sous-zone(s) qui a(ont) ete modifiee(s).
    • En contrepartie, verifier l'intersection de ce qu'on dessine avec la zone de clip du Graphics dans la surchage de paintComponent() histoire de ne pas perdre de temps a redessiner des trucs inutiles.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    a propos , comment
    Citation Envoyé par bouye Voir le message
    Appeler repaint() uniquement sur la(les) sous-zone(s) qui a(ont) ete modifiee(s)
    ?
    j'utilise la méthode paintImmediately() dans mes traveaux.

Discussions similaires

  1. question pour resoudre l affichage d'une page
    Par carmen256 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/06/2006, 15h39
  2. Superposition de composant pour faire une image
    Par spikto dans le forum Composants VCL
    Réponses: 14
    Dernier message: 31/12/2005, 15h18
  3. [C#] Format unique pour les mêmes affichages ?
    Par luimême dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/11/2005, 17h32
  4. Accélérer l'affichage d'une jframe
    Par debutant java dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 16/04/2005, 12h23

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