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

AWT/Swing Java Discussion :

[Débutant] problème rafraichissement ImageIcon avec Paint()


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Points : 27
    Points
    27
    Par défaut [Débutant] problème rafraichissement ImageIcon avec Paint()
    Bonjour bonjour !

    nouveau problème aujourd'hui :

    J'essaye d'inserer une image dans un panel à l'aide d' "ImageIcon". Seulement ,cette image va changer au cours de mon programme, en fonction d'une variable qui va être changée par un thread.

    Voici mon JPanel :

    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
     
     
    public class MenuConditionsClimatiques extends JPanel{
     
    	ConditionsClimatiques tConditionsClimatiques;
     
    	private ImageIcon soleil = null; //image du soleil
    	private ImageIcon flocon = null; //image du flocon
     
    	private int tmpPeriodeAnnee;
     
    	public MenuConditionsClimatiques(Horloge tHorloge) {
     
    		soleil = new ImageIcon("images/soleil.png");
    		flocon = new ImageIcon("images/flocon.png");
     
     
    		// Création et lancement du thread de détéction des conditions climatiques
    		ConditionsClimatiques tConditionsClimatiques = new ConditionsClimatiques(tHorloge);
    		tConditionsClimatiques.start();
     
     
                    tmpPeriodeAnnee = tConditionsClimatiques.getPeriodeAnnee();
     
     
    		this.add(lImageTps);
    	}
     
     
     
    	//	surcharge de la fonction paint pour dessiner l'image
    	public void paint(Graphics g){
    		Graphics2D graph = (Graphics2D)g;
     
    		tmpPeriodeAnnee = tConditionsClimatiques.getPeriodeAnnee();  // cette ligne fait planter l'affichage de mon label général !! (tout blanc)
     
     
    		if (tmpPeriodeAnnee == 1)
    		{
    		//dessiner la carte
    		soleil.paintIcon(this, graph, 0, 0);
    		}
    		else
    		{
    		flocon.paintIcon(this, graph, 0, 0);
    		}
     
     
    	}
     
     
    }
    Donc dans mon thread tHorloge, une fonction getPeriodeAnnee permet de récupérer la valeur de tmpPeriodeAnnee (1 ou -1) en temps réel. En fonction de cette valeur, on doit m'afficher une image flocon ou soleil.

    Seulement, tout mon affichage plante si j'essaye de mettre getPeriodeAnnee dans la fonction paint pour récupérer la valeur retournée à tout moment.

    Comment faire ? Utiliser la fonction repaint() ??
    Le ImageIcon n'est pas une bonne solution ?

    Merci pour votre aide, je manque énormement d'experience dans tout ce qui est affichage dynamique !


    Pirokkk.

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Selon toi, qu'est-ce qui fait que cela plante avec cette méthode getPeriodeAnnee ? A-t-elle quelque chose de particulier ?

    Tu parles d'une variable mise à jour par un thread. Comment fais-tu la synchronisation ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Bonjour Gifffftane,

    ce n'est pas cette methode qui fait planter l'affichage, car elle marche très bien lorsque je met a jour un label pour afficher un mois. C'est d'ailleur ce que je faisais avant, j'écrivais "flocon" ou "soleil" en fonction du mois dans le panel.

    Maintenant, j'essaye d'inserer une image avec ImageIcon et paint(), mais je ne maitrise absolument pas leur utilisation...

    Voici ma classe thread avec getPeriodeAnnee :

    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 Conditions extends Thread
    {
     
     
        private int periodeAnnee;
        private Horloge tmpHorloge;
     
     
        public ConditionsClimatiques(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;
        }
    }

Discussions similaires

  1. [débutant]Problème de requete avec mon DataSet
    Par blacknight dans le forum Accès aux données
    Réponses: 6
    Dernier message: 31/10/2008, 23h51
  2. [Débutant] problème de preload avec image
    Par arnofly dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 12/02/2008, 20h48
  3. Réponses: 43
    Dernier message: 14/06/2007, 18h56
  4. Réponses: 7
    Dernier message: 04/06/2006, 18h00
  5. Réponses: 4
    Dernier message: 11/04/2006, 10h07

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