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

Composants Java Discussion :

Pb scintillement-stabilité lors réaffichage de JPanel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut Pb scintillement-stabilité lors réaffichage de JPanel
    Bonjour,

    je suis en train de développer un petit jeu du serpent (comme sur les vieux portables nokia !). J'ai quelques difficultés à réaliser une interface graphique stable et agréable. En effet, mon serpent à une fâcheuse tendance à "scintiller" et à "sauter"... Comme une brève démonstration apporte plus qu'une longue explication, je vous propose d'y jeter un coup d'oeuil par vous-même:

    jar exécutable
    ou
    version applet

    (le jar marche un peu mieux que l'applet...)


    Le réaffichage est fait de la manière suivante: j'appelle paint(Graphics g) sur mon panel pour le vider. Ensuite je dessine le nécessaire à l'aide de fillRoundRect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      JPanel pan = new JPanel();
      ...
      pan.paint(pan.getGraphics()); // vide le contenu du JPanel
      pan.getGraphics().fillRoundRect(x,y,z,...); // dessine un rectangle

    Existe-t-il une autre méthode plus adaptée pour vider un JPanel ou bien est-ce que j'utilise la bonne : (car je crois fortement que les bugs d'affichage proviennent de l'effacement des Panels...)

    Merci de vos réponses !

  2. #2
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Si dans ton JPanel tu redefinies la methode paintComponent t'a pas besoin de "vider le contenu du panel"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void paintComponent(Graphics g){
      super.paintComponent(g);
      //ici le dessin de tes rectangles
    }
    Chaque fois que paint est appelé ca vide le buffer et ca redessine (et en plus si t'utilise des JPanel il y a normalement par défaut le double buffering donc moins de scintillement).

    Ensuite ton probleme vient peut etre de la vitesse de rafraichissement de ta frame, tu utilise surement un thread ou un timer pour ca, alors essaye de changer cette vitesse.

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Merci je vais essayer

    il faut obligatoirement que je dérive une classe de JPanel, non?

    mais ensuite, comment est géré l'appel à paintCompenent(..)? Dans mon livre (Programmer en Java, 2è edition, Claude Delannoy), on me dit juste que paintCompenent est exécuté à chaque fois que le Panel a besoin d'être redessiné...

    Cet appel doit-il être explicite :

  4. #4
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Ouais faut que tu derive d'un JPanel.

    L'appel à paintComponent est fait automatiquement quand tu deplace ta fenetre ou quand tu la redimensionne.
    Sinon tu peux lui faire appel par la methode repaint();
    Dans ton cas ,tu dois avoir un thread ou un timer pour rafraichir ta fenetre, tu fais alors appel a la methode repaint() quand tu veux rafraichir ta fenetre.

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    oui exactement, le thread est en fait codé dans ma méthode main...

    merci de tes précisions, j'essaie ça et je reviens pour clore le sujet !

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Voilà, ça fonctionne !

    bon, ça scintille encore beaucoup, mais au moins maintenant mon code est plus structuré (je n'avais pas fait de classes avec mes panels)

    Merci et @+ !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/09/2006, 15h19
  2. Scintillement d'une image lors de son déplacement
    Par johnbob789 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 31/07/2006, 16h04
  3. Eviter le scintillement lors de manip css avec javascript...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/04/2006, 21h11
  4. [Image] scintillement lors déplacement sur autre composant
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 21
    Dernier message: 07/12/2005, 10h27
  5. [JPanel] quel méthode appelé lors du rafraichissement...
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 01/11/2005, 16h08

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