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

 Java Discussion :

Repeindre un seul élément dans un JPanel


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Repeindre un seul élément dans un JPanel
    Bonjour à tous,
    J'essaie de réaliser un logiciel graphique de cinématique. J'ai besoin pour cela d'un ensemble d'éléments : points, droites, cercles, intersections, etc, que j'arrive facilement à créer, soit à la souris, soit par entrée clavier. Je les stocke dans des matrices et les dessine dans un JPanel avec paintComponent. Lorsque je veux modifier un élément, par exemple pour changer sa couleur pour indiquer qu'il a été sélectionné, existe-t-il une méthode pour ne repeindre uniquement que cet élément ou dois-je utiliser le repaint() du JPanel*?
    Merci par avance de me rrépondre.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    D'après ce que tu nous indique, j'ai l'impression que l'ensemble des tes éléments affichés sont dessinés dans la fonction paint de ton JPanel.
    Ce qui veux dire que tu va être obliger de faire appel à cette méthode pour modifier ce que tu affiche.

    Cependant, il est possible que tu ai définit tes propres composants SWING qui sont ajouté à ton JPanel, comme un composant classique. Si c'est le cas, il est peut-être possible de ne faire le paint que sur ce composant là. Cependant, j’émets un doute à cela, car si ton composant devient plus petit ou change de place, c'est au composant parent de définir ce qu'il y a à la place. Et je ne suis pas sûr que cette partie soit mise à jour automatiquement.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci infiniment pour ta réponse.
    D'après ce que tu nous indique, j'ai l'impression que l'ensemble des tes éléments affichés sont dessinés dans la fonction paint de ton JPanel.
    Ce qui veux dire que tu va être obliger de faire appel à cette méthode pour modifier ce que tu affiche.
    C'est effectivement le cas, et c'est ce que je craignais.
    Je vais essayer de me débrouiller en utilisant des flags pour ne peindre que ce que je veux suivant les cas. Cela ne me semble pas très élégant ...

    Encore merci.
    Cordialement
    Gian-Piero

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Après, il t'es possible de faire une gestion en interne de comment tu gère l'affichage.
    Il t'es totalement possible de faire une gestion par layer. Et avoir un "backgroud" que tu ne recalcule pas à chaque fois, mais gérer dans une mémoire tampon.
    Ainsi, si tu change les éléments sur le premier layer, tu ne mets à jour que celui-ci et tu le combine avec les autres qui sont déjà "calculer".

    Cependant, cela reste une gestion fine de ton affichage, ce qui n'est pas forcement nécessaire dans ton cas.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Après, il t'es possible de faire une gestion en interne de comment tu gère l'affichage.
    Il t'es totalement possible de faire une gestion par layer. Et avoir un "backgroud" que tu ne recalcule pas à chaque fois, mais gérer dans une mémoire tampon.
    Ainsi, si tu change les éléments sur le premier layer, tu ne mets à jour que celui-ci et tu le combine avec les autres qui sont déjà "calculer".
    Cependant, cela reste une gestion fine de ton affichage, ce qui n'est pas forcement nécessaire dans ton cas.
    Merci infiniment, c'est ce que je vais faire.
    Cordialement

    Gian-Piero

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    En Java2D, il n'existe pas de moyen de repeindre un seul élément, mais il existe des moyens pour ne repeindre que ce qui a besoin d’être repeint : cela s'appelle la gestion du clip et de la boite englobante de la zone a redessiner.
    Quand tu demandes a redessiner ton cercle, tu dois non pas effectuer un appel a repaint() mais a repaint(x, y, w, h). Ces valeurs définissent une zone englobante qui encadre ta zone redessiner (avec une taille suffisamment large pour prendre en compte tout effet graphique ou toute transformation que tu pourrais y avoir placé -ex: un flou sur le cercle fait que la boite englobante cercle + flou a redessiner est plus grande que celle du cercle non-floute-).

    Ensuite dans ta surcharge de paintComponent(), actuellement tu as une approche basique : tout redessiner sans chercher a réfléchir. Mais ce que tu devrais faire en fait, c'est récupérer la forme qui sert de clip (qui n'est pas forcement rectangulaire, ça peut être une union de toutes les requêtes repaint(x, y, w, h) reçues depuis le dernier affichage), placé sur le Graphics reçu en paramètre et prendre sa boite englobante. Ensuite parcours ta liste d'objets et tu testes si la boite englobante de ces objets* intersectent cette boite englobante. Si c'est le cas, tu les dessines ; dans le cas contraire, tu les ignores (ils sont en dehors de la zone de clip et donc les dessiner ne fait rien a l’écran mais a un cout sur la performance globale du temps de rendu). Le temps de parcours de la liste des objets et du test d'intersection des boites englobantes est négligeable compare au temps de dessins de ces objets dans le Graphics.

    *Ici aussi il faut faire attention a d’éventuels effets graphiques ou transformations qui feraient que la boite englobante d'un objet + effect est plus grande que la boite englobante de l'objet "forme simple non transformée"
    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
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci infiniment pour m'avoir signalé cette technique que je ne connaissais pas encore, étant donné que je n'utilise Java que depuis trois mois. Je vais essayer de la mettre en pratique.

    Cordialement

    Gian-Piero

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

Discussions similaires

  1. Affichage éléments dans JPanel
    Par bbtreso dans le forum Débuter
    Réponses: 7
    Dernier message: 26/08/2011, 15h49
  2. récupérer un seul élément dans un fichier xml
    Par boboss76 dans le forum VBScript
    Réponses: 4
    Dernier message: 08/12/2010, 09h35
  3. Sélectionner un seul élément dans une URL
    Par Général03 dans le forum Firefox
    Réponses: 2
    Dernier message: 26/10/2010, 10h44
  4. Connaître la position d'un élément dans un JPanel au niveau Layout
    Par Yannick_from_31 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/08/2007, 16h04
  5. Espace entre élément dans JPanel
    Par Kiboumz dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 12/04/2006, 11h27

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