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 :

Faire clignoter une forme (graphics2D)


Sujet :

2D Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut Faire clignoter une forme (graphics2D)
    Bonjour,


    j'utilise un JPanel dans lequel je dessine des formes automatiquement. L'utilisateur peut aussi en dessiner dessus.

    Je voudrais pouvoir faire clignoter certains de mes objets affichés (objets que j'affiche par le biais de la méthode paint(Graphics d) de mon JPanel, méthode redéfinie dans mon objet qui hérote de JPanel).

    Je pensais utiliser une thread qui s'occupe de faire un repaint de mon JPanel et gérer 1 coup sur 2 l'affichage ou non de mes formes à faire clignoter.
    Cependant, j'affiche déjà énormément de données (qui sont calculées). Donc cette idée n'est pas très bonne, car un repaint prend un certain temps (1 ou 2 sec. maxi).

    Y'a t'il une meilleur solution pour faire clignoter certains objets sans redessiner les autres (utilisation d'un buffer ?) ?


    Merci d'avance pour une réponse .

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    repaint sur le clip de ta forme: http://mindprod.com/jgloss/repaint.html partie faster repaint)

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Merci pour l'info.

    Ca améliore l'idée que j'ai testé, mais je ne suis pas satisfait du résultat.
    (J'ai aussi essayé de superposer une Window avec JPanel transparent qui ne contient que mon objet qui doit clignoter, évitant ainsi d'appeler un paint() sur mon dessin, mais c'est trop du bidoullage et pas satisfaisant).

    Donc mon objectif est d'éviter l'appel au paint() ou au repaint() sur mon dessin (mon JPanel).

    Si vous avez d'autres idées... je rélféchirais à ça plus tard... en espérant convaincre le client de l'inutilité de ce clignotement .

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Août 2004
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Pour faire ce que tu veux, tu dois créer deux images, et les afficher alternativement en utilisant un timer...

    C'est la méthode utilisée dans les jeux.

    Note : 2 secondes pour faire ton paint, c'est très long, tu devrais
    te pencher sur l'optimisation de ton paint.
    Certaines fonctions sont très lentes par rapport à d'autres qui font la même chose... les fonctions de g2d sont parfois plus rapides et parfois plus lentes que celles du Graphics original

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par reseau-emploi
    Pour faire ce que tu veux, tu dois créer deux images, et les afficher alternativement en utilisant un timer...

    C'est la méthode utilisée dans les jeux.

    Note : 2 secondes pour faire ton paint, c'est très long, tu devrais
    te pencher sur l'optimisation de ton paint.
    Certaines fonctions sont très lentes par rapport à d'autres qui font la même chose... les fonctions de g2d sont parfois plus rapides et parfois plus lentes que celles du Graphics original
    Merci pour l'info.

    Je vais réfléchir à créer 2 images.
    Cette idée ressemble un peu à la mienne qui est de créer une 2° image transparente au dessus dans laquelle je dessine, ou non, seulement mes formes clignotantes.
    Je vais voir pour cette idée de timer. L'idée est bonne, mais je vais complexifier mon application pour un type d'affichage parmis 7 autres... alors que je veux conserver une certaines généricité pour conserver l'évolutivité de mon appli. Cruel dilemne.

    Quand je parlais de 2 sec., j'ai exagéré un peu . En fait, c'est assez optimisé et ça dépasse jamais la seconde dans les cas les plus lourds.

  6. #6
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    tu peux aussi simplement ne pas redessiner l'image en alternance, tu n'auras pas de 2e image. Algorithmiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Clignote {
    int clignoteur = 0;
    Image[] image = new Image[2];
    image[0] = new BufferedImage(img, width, height);
    void paint(Graphics g) {
     g.fillRect(g.getBackground(), 0,0, width, height);
     if(image[(++clignoteur)%2] instanceof Image) 
    g.drawImage((BufferedImage)image[clignoteur%2], null, null);
    }
    }

Discussions similaires

  1. Faire clignoter une fenetre windows form
    Par adenoula dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/01/2012, 01h53
  2. [VB6] COmment Faire Clignoter une image ?
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 25/04/2006, 11h29
  3. Méthode simple pour faire clignoter une editbox
    Par mr.saucisse dans le forum MFC
    Réponses: 5
    Dernier message: 10/03/2006, 11h57
  4. Réponses: 8
    Dernier message: 07/02/2006, 18h31
  5. Réponses: 2
    Dernier message: 13/12/2004, 15h16

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