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 :

[Débutant][Thread] Comment lancer en boucle un affichage


Sujet :

Java

  1. #1
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut [Débutant][Thread] Comment lancer en boucle un affichage
    Bonjour,

    Je voudrais utililiser les Threads pour donner l'impression du mouvement.
    Mais je ne sais pas ou mettre ma boucle et ma variable.
    D'avance merci de votre aide

    le code
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
     
    public class TestGraphic extends JFrame implements Runnable
    {
     
    	//static int i;
    	public JPanel test2; 
    	Graphics lecontexteGr;
    	public static void main (String[] args)
    	{
     
    	TestGraphic TG; 
    	TG = new TestGraphic(); 
    	TG.show();
    	new Thread(TG).start();	
     
    }
     
     
    public TestGraphic ()
    	{
    	setSize (300,200);
    	addWindowListener (new WindowAdapter() {
    	public void windowClosing (WindowEvent événement)
    		{ 
    		System.exit(0);
    		}
    	});
     
    	test2 = new lePanneau();
    	getContentPane().add(test2);
     
    	}
     
    	public void run()
    	{
    	int j=0;
    	while &#40;j<100&#41;
    		&#123;
    		j++;
    		repaint&#40;&#41;;
    		//sleep&#40;200&#41;;
    		&#125;
    	&#125;
    &#125;
     
    class lePanneau extends JPanel &#123;
    static int i;
    public void paintComponent &#40;Graphics surface&#41;
    &#123;
    i=0;
    //while &#40;i<1000&#41;
    	&#123;
    	super.paintComponent&#40;surface&#41;;
    	surface.drawRect&#40;5, 5, 10, 10&#41;;
    	surface.drawArc&#40;20, i,200, 200, 10, 30&#41;;
     
    	i++;
    	&#125;
    &#125;
    &#125;

  2. #2
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    ton implements Runnable doit se trouver au niveau de la classe qui doit être Threadé, autrement dit chez toi, TestGraphic
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  3. #3
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    N'est ce pas ce que j'ai fait ?

    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
    33
     
    public class TestGraphic extends JFrame  implements Runnable 
    &#123;
     
       //static int i; 
       public JPanel test2; 
       Graphics lecontexteGr; 
       public static void main &#40;String&#91;&#93; args&#41; 
       &#123; 
     
       TestGraphic TG; 
       TG = new TestGraphic&#40;&#41;; 
       TG.show&#40;&#41;; 
       new Thread&#40;TG&#41;.start&#40;&#41;;    
     
    &#125; 
     
     
    public TestGraphic &#40;&#41;
       &#123; 
       setSize &#40;300,200&#41;; 
       addWindowListener &#40;new WindowAdapter&#40;&#41; &#123; 
       public void windowClosing &#40;WindowEvent événement&#41; 
          &#123; 
          System.exit&#40;0&#41;; 
          &#125; 
       &#125;&#41;; 
     
       test2 = new lePanneau&#40;&#41;; 
       getContentPane&#40;&#41;.add&#40;test2&#41;; 
     
       &#125; 
    ....

  4. #4
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    oui exactement....

    Mais tu entends quoi par impression de mouvements? Tu voudrais que ca donne quoi?
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  5. #5
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    En fait j'aurais voulu faire bouger un objet en utilisant une variable "i"
    comme dans le drawArc ci-dessous (extrait du code que j'ai collé dans mon premier post) mais je ne vois pas ou mettre une boucle à incrementer soit dans le run soit dans le paintComponent...
    Je bidouille ... et du coup mon affichage disparait

    D'avance merci


    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
     
    class lePanneau extends JPanel &#123; 
    static int i; 
    public void paintComponent &#40;Graphics surface&#41; 
    &#123; 
    i=0; 
    //while &#40;i<1000&#41; 
       &#123; 
       super.paintComponent&#40;surface&#41;; 
       surface.drawRect&#40;5, 5, 10, 10&#41;; 
       surface.drawArc&#40;20, i ,200, 200, 10, 30&#41;; 
     
       i++; 
       &#125; 
    &#125;

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Utilise plutot un javax.swing.Timer. Ne met JAMAIS de boucle comme ca dans paintComponent(). Reprends ton premier code et deplace la declaration de i dans la classe TestGraphic mais sans le declarer static. Dans ta boucle rajoute un Thread.sleep(30) (pour dessiner a 30 trames par secondes en gros) et utilise i dans ton paintComponent().
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Merci de ces infos, je m'y remets

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/09/2009, 22h00
  2. Comment lancer une procédure après affichage d'une form
    Par Fouinard dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/10/2008, 10h52
  3. Timers, boucles d'affichage et Thread.sleep
    Par Silk_do_Nadear dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 28/07/2007, 02h49
  4. [VC++] Comment lancer un Thread
    Par ksoft dans le forum MFC
    Réponses: 5
    Dernier message: 30/05/2006, 15h19
  5. [C#][Débutant] Comment lancer une methode d'une autre fenetre
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/05/2006, 00h17

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