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 :

Problème java Repaint()


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut Problème java Repaint()
    Bonjour,

    Voila je dessine un cercle grâce à la souris sur un panel, puis j'ai envie que ce cercle tombe grâce à un vecteur. Mais le problème se situe au niveau de repaint il se lance en continue ce qui fait que les dessins ne s'affichent pas.
    Donc j'aimerai bien connaître la facon pour faire chuté ce cercle.
    Merci de votre aide !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    - Sauvegarder quelque part comment redessiner ce cercle (rayon, épaisseur, couleur, que sais-je)
    - À chaque repaint, calculer/déduire quelle doit être la position du cercle en tenant compte de la vitesse à laquelle il tombe (où doit se trouver son centre, en tenant compte du temps écoulé depuis sa dernière position.)
    - Redessiner le cercle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    Merci de ta réponse,
    mais j'ai déjà tout ça le problème c'est que j'arrive pas à dessiner et à effacer des cercles où on a l'impression de mouvement.
    Moi ce que j'ai c'est soit une sorte de spirale (tous les cercles dessinés s'affichent) soit uniquement le dernier cercle qui s'affiche.
    Dans le cas du dernier cercle on dessine le cercle à la souris mais on le voit pas parce qu'on repaint tous le pannel avec g.fillRect(..). et si on repaint pas on arrive dans le premier cas.
    L'idée est de dessiner,repeindre et de redessiner à la bonne position.

    Merci de votre aide.=)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public void paintComponent(Graphics g){
     
    			g.setColor(Color.black);
    			int a = (int) (p1.gtX() - p2.gtX());
    			int b = (int) (p1.gtY() - p2.gtY());
    			int a2 = (int)Math.sqrt(a*a+b*b);  	
    			int x= (int) ((p1.gtX()+p2.gtX())/2)-a2/2;
    			int y=(int) ((p1.gtY()+p2.gtY())/2)-a2/2;
    			g.drawOval(x, y,a2, a2 );
    			Cercle c = new Cercle(x,y);
    			for(int i=0;i<50;i++)
    			{
     
    			  try {
    				  g.setColor(Color.red);
    				  g.fillRect(0, 0, 800, 600);
    				  c.setRayon(a2/2);
    				  Vecteur v = new Vecteur(3,4);
    				  v.translation(c.getCentre());
     
                                      Thread.sleep(10);
                                      g.setColor(Color.black);
          			          g.drawOval(c.getCentre().gtX(), c.getCentre().gtY(), 2*(int)c.getRayon(),2*(int) c.getRayon());
     
     
     
    			  	  } 
    			  catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
    			  	}

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Par défaut
    A mon avis, si tu vois que le dernier c'est que tu repaint trop vite. Il te fait tous les tours de boucle avant que tu puisses t'en rendre compte.
    Faudrait donc qu'avant chaque repaint tu lui fasse attendre un certain laps de temps.
    D'autre part, ça me "choque" la boucle for dans le paintComponent pour le faire bouger. J'aurais tendance à mettre la boucle for ailleurs, elle change les coordonnées selon en certain vecteur et le paintComponent se contente de dessiner le cercle au bon endroit.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    J'ai déjà eu un problème dans le même genre je pense.

    Je devais faire un jeu du puissance 4 pour un projet en cours, et il fonctionnait très bien sauf que lorsque j'arrivais à la fin de ma partie et que je voulais en refaire une nouvelle, mon tableau contenant mes pions (mon modèle) se réinitialisait bien mais les pions dessinés persistaient.

    Au final, j'ai réglé le problème en mettant un fond de couleur, je pense que c'était parce que le fond de base (transparent, ou quelque chose dans ce style), lorsqu'il se repeignait n'effaçait pas les anciens dessins puisque transparent.

    Essaie de mettre un fond blanc (ou d'une autre couleur). Et personnellement, aussi, quand je redéfini une fonction (en général je fais mes dessins dans une classe héritant d'un JPanel et je redéfini la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void paint(Graphics g) {
        super.paint(g);
    }
    Je fais toujours appel à un petit super, ça peu aider aussi ^^

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/08/2008, 10h00
  2. [EJB3] [JBoss] Problème java.lang.NoClassDefFoundError:
    Par jctigre dans le forum Java EE
    Réponses: 3
    Dernier message: 24/04/2006, 13h33
  3. Problème Java/MySql : "Unknown database"
    Par darkflo dans le forum JDBC
    Réponses: 3
    Dernier message: 24/03/2006, 11h34
  4. problème java run time environment
    Par abrmed dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 19/08/2005, 13h27
  5. [Graphisme][Débutant(e)] Problème sur repaint()
    Par Katyucha dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 08/10/2004, 17h12

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