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

Graphisme Java Discussion :

pb : paint et repaint d'une image à partir d'un thread


Sujet :

Graphisme Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut pb : paint et repaint d'une image à partir d'un thread
    bonjour,
    après avoir chercher longtemps sur internet comment fonctionne les fonctions paint et repaint, je n'arrive toujours pas à rafraichir une image dans un JPanel.

    Notre code est le suivant:
    dans une classe étendue de JPanel, on récupère une valeur tmp qui vient de la classe CC étendue de thread permettant de récupérer une valeur tmp EN TEMPS REEL. En fonction de cette valeur nous devons afficher l'image soleil ou flocon. Avec la fonction paint() actuel la première image s'affiche mais n'est pas rafraichit.

    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
     
    public class MCC extends JPanel{
     
    	JLabel lImageTps = null;
     
    	//ConditionsClimatiques tConditionsClimatiques;
     
    	private ImageIcon soleil = null; //image du soleil
    	private ImageIcon flocon = null; //image du flocon
     
    	private int tmpPeriodeAnnee =1;
     
    	public MCC(CC tCC) {
     
     
    		// Création et lancement du thread 
    		tmp = tCC.getPeriodeAnnee();
     
     
    		soleil = new ImageIcon("images/soleil.png");
    		flocon = new ImageIcon("images/flocon.png");
     
    		this.add(lImageTps);
    	}
     
     
     
    	//	surcharge de la fonction paint pour dessiner tous les elements de la carte
    	public void paint(Graphics g){
    		Graphics2D graph = (Graphics2D)g;
     
     
    		if (tmp == 1)
    		{
    		//dessiner la carte
    		soleil.paintIcon(this, graph, 0, 0);
    		}
    		else
    		{
    		flocon.paintIcon(this, graph, 0, 0);
    		}
     
    	}
    et notre classe thread donne:
    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
     
    public class CC extends Thread
    {
     
     
        private int periodeAnnee;
        private Horloge tmpHorloge;
     
     
        public CC(Horloge tHorloge)
        {  	
        		// Réference tmpHorloge sur Horloge
        		tmpHorloge = tHorloge;
        }
     
     
     
        public void run ()
    	{
        	try
      	    {
    	      while (this.isAlive ())
    	      {
     
    	      	if( (tmpHorloge.getMois() == 10) || (tmpHorloge.getMois() == 11) )
    	        {
    	        	System.out.println("flocon"); 
     
    	      		periodeAnnee=-1;
    	        }
    	      	else
    	      	{
    	      		System.out.println("soleil");
     
    	        	 periodeAnnee=1;
    	      	}
     
    	      	Thread.sleep (500);
    	      }
      	    }
    	     catch (InterruptedException e) { }
     
    	}
     
     
        public int getPeriodeAnnee()
        {
        	return periodeAnnee;
        }
    }

    Merci.

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    je ne comprends comme c'est sensé marcher entre ton Thread et le JPanel.

    je ne vois aucun repaint() et un seul "tmp = tCC.getPeriodeAnnee();" dans le constructeur.

    essai comme ca :
    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
    
    public class MCC extends JPanel{
     
    	JLabel lImageTps = null;
    	
    	//ConditionsClimatiques tConditionsClimatiques;
    	
    	private ImageIcon soleil = null; //image du soleil
    	private ImageIcon flocon = null; //image du flocon
    	
    	private int tmpPeriodeAnnee =1;
    	
    	public MCC(CC tCC) {
    		
     
    		// Création et lancement du thread 
    		tmp = tCC.getPeriodeAnnee();
    		
    		
    		soleil = new ImageIcon("images/soleil.png");
    		flocon = new ImageIcon("images/flocon.png");
    		
    		this.add(lImageTps);
    	}
    	
    	
     
    	//	surcharge de la fonction paint pour dessiner tous les elements de la carte
    	public void paintComponent(Graphics g){
    		Graphics2D graph = (Graphics2D)g;
     
                          tmp = tCC.getPeriodeAnnee();
    
    		if (tmp == 1)
    		{
    		//dessiner la carte
    		soleil.paintIcon(this, graph, 0, 0);
    		}
    		else
    		{
    		flocon.paintIcon(this, graph, 0, 0);
    		}
    		
    	}
    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
    private int periodeAnnee;
        private Horloge tmpHorloge;
        
        
        public CC(Horloge tHorloge)
        {  	
        		// Réference tmpHorloge sur Horloge
        		tmpHorloge = tHorloge;
        }
        
     
        
        public void run ()
    	{
        	try
      	    {
    	      while (this.isAlive ())
    	      {
    	    	  
    	      	if( (tmpHorloge.getMois() == 10) || (tmpHorloge.getMois() == 11) )
    	        {
    	        	System.out.println("flocon"); 
             	 
    	      		periodeAnnee=-1;
    	        }
    	      	else
    	      	{
    	      		System.out.println("soleil");
    	        	 
    	        	 periodeAnnee=1;
    	      	}
    	      	//faut appeller un repaint() sur le JPanel ici
    	      	Thread.sleep (500);
    	      }
      	    }
    	     catch (InterruptedException e) { }
     
    	}
     
        
        public int getPeriodeAnnee()
        {
        	return periodeAnnee;
        }
    }
    sa devrait aller mieux comme ca.

    Par contre (vue que je fais des cartes moi aussi), une carte EN TEMPS REEL ne veut pas dire qui se redessine toute les demi-seconde (encore heureux vu que pour les miennes il faut entre 2 et 40 secondes en moyennes) ...
    Si tu veux bien le faire, il faut que se soit ton horloge qui créé un evenement si la saison change, le panneau recupere cet evenement et se met a jour avec la nouvelle valeur. De cette facon tu economise enormement de ressource (il n'y a plus a dessinner toutes les demi-seconde) et ta carte est d'avantage EN TEMPS REEL car elle se met a jour des qu'il y a changement, ce qui est plus precis qu'une demi-seconde.

Discussions similaires

  1. pb paint et repaint d'une image dans un thread
    Par zazou0506 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/01/2008, 22h21
  2. réafficher une image à partir des données recupérées
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2005, 10h50
  3. [ImageMagick] Générer une image à partir de plusieurs images ?
    Par fichtre! dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 16/02/2005, 15h32
  4. [CR] Inserer une image à partir d'un fichier
    Par Gandalf24 dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 23/07/2003, 10h55
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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