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 :

Problème d'affichage d'images.


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut Problème d'affichage d'images.
    Bonsoir,
    Je fais un petit diaporama d'images en swing, et je n'arrive pas à comprendre pourquoi lorsque je lance ma JFrame, elle est vide et rien ne se passe alors que j'aimerais voir mes deux images défiler.
    Voici le code de ma MainClass :
    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
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.Dimension;
     
    public class MonMain {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		JFrame f = new JFrame();
    		f.setTitle("Test Disporama");
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.setLocation(225,5);
    		f.setSize(new Dimension(300,300));
    		Diaporama Diap = new Diaporama();		
    		JPanel p = new JPanel();
    		p.add(Diap);
    		f.add(p);
    		f.setVisible(true);	
    	}
    }
    Et voici le code de ma classe Diaporama :
    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
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Diaporama extends JPanel implements Runnable 
    {
        BufferedImage[] images = new BufferedImage[2];
        int frame = 0;
        Thread thread;
     
        public void init() 
        {
        	try{
        			images[0] = ImageIO.read(new File("./Plateau 1.gif"));
        			images[1] = ImageIO.read(new File("./Plateau 2.gif"));
        		}catch (Exception e){
        			System.err.println("Erreur de chargement de l'image plateau");
        		}
        }
        public void start() 
        {
          (thread = new Thread(this)).start();
        }
        public void stop() 
        {
          thread = null;
        }
        public void paintComponent(Graphics g) 
        {
          g.drawImage(images[frame], 0, 0, this);
        }
        public void run() 
        {
          int delay = 1000;    // 1 seconde
          try 
          {
    	       while (thread == Thread.currentThread()) 
    	       {
    		       frame = (frame+1)%images.length;
    		       repaint();
    		       Thread.sleep(delay);
    	       }
    	   } catch (Exception e) { System.out.println("Erreur");}
        }
    }
    Ce n'est surement pas difficile de trouver la solution mais je bloque là.
    Je vous remercie d'avance pour vos réponses.
    A+

  2. #2
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Bonjour,

    Pour ajouter des composant à une fenêtre, cela se fait à partir du contentPane :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JPanel panel = new JPanel();
    frame.setContentPane(panel);
    panel.add(...);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame.getContentPane().add(...);
    Ensuite dans ton cas, ton Diaporama étend JPanel donc je ne vois pas l'interêt d'ajouter le Diaporama à un JPanel puis seulement ensuite ajouter ce JPanel à la fenêtre. Pourquoi ne pas ajouter directement le Diaporama à la fenêtre ?

    Ensuite je ne vois pas où tu démarre ton Thread (pour le diaporama) ??? Sinon tu peux aussi regarder du côté des Timer.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Voilà, j'ai changé certaines informations comme tu me la conseillé.
    Voici à présent le code de ma MainClass :
    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
     
    import javax.swing.JFrame;
    import java.awt.Dimension;
     
    public class MonMain {
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		JFrame f = new JFrame();
    		f.setTitle("Test Disporama");
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.setSize(new Dimension(300,300));
    		Diaporama Diap = new Diaporama();		
    		f.getContentPane().add(Diap);
    		f.setVisible(true);		
    	}
    }
    Mais il n'y a toujours rien qui s'affiche à l'écran, tu dois avoir raison. C'est que le thread ne démarre pas. Comment faire pour le faire démarrer ?

  4. #4
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Alors j'ai regardé ce que tu faisais pour ton Thread et j'ai l'impression que tu n'a pas du comprendre le fonctionnement de la classe Thread.

    Etant donné que ton diaporam implémente Runnable, pour créer ton Thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread thread = new Thread(diaporama);
    Ensuite pour le lancer :

    Je sais pas trop ce que tu veux faire avec tes méthodes start et stop. Je suppose que ca peut avoir un lien avec les méthodes start et stop de la classe Thread. Tu n'a pas besoin de redéfinir ces méthodes !!!

    La méthode start permet de lancer le thread donc celle "par défaut" est très bien ! La méthode stop est deprecated donc a ne pas utiliser.

    Ensuite dans la méthode run() devrai suffir pour le moment un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (true) {
    ...
    }
    Le chargement de tes images peut etre fait dans le constructeur du diaporama (ta méthode init()).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Effectivement, je n'arrive pas bien à comprendre le fonction d'un thread.
    J'ai rechangé ma classe comme ceci :
    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
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Diaporama extends JPanel implements Runnable 
    {
    	private static final long serialVersionUID = 0;
        private BufferedImage[] images = new BufferedImage[2];
        private int frame = 0;
        private Thread thread = new Thread(this);
     
        public void init() 
        {
        	try{
        			images[0] = ImageIO.read(new File("./Plateau 1.gif"));
        			images[1] = ImageIO.read(new File("./Plateau 2.gif"));
        		}catch (Exception e){
        			System.err.println("Erreur de chargement de l'image plateau");
        		}
        }
        public void paintComponent(Graphics g) 
        {
        	g.drawImage(images[frame], 0, 0, this);
        }
        public void run() 
        {
        	try 
        	{
        		while(true) 
        		{
        			frame = (frame+1)%images.length;
        			repaint();
        			Thread.sleep(1000); // 1 seconde
        		}
        	} catch (Exception e) { System.out.println("Erreur");}
        }
    }
    Ce que je n'arrive pas à comprendre, c'est où lancer mon thread avec :
    thread.start();
    Aurais-tu une idée pour cet exemple de classe ?
    Merci

  6. #6
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Voilà,

    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
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Diaporama extends JPanel implements Runnable {
     
    	private BufferedImage[] images;
    	private int cpt;
     
    	public Diaporama() {
    		super();
     
    		images = new BufferedImage[2];
    		try {
    			images[0] = ImageIO.read(new File("Arche.jpg"));
    			images[1] = ImageIO.read(new File("Collines.jpg"));
    		} catch (IOException e) {}
     
    		new Thread(this).start();
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(images[cpt], 0, 0, this);
    	}
     
    	public void run() {
    		while (true) {
    			cpt = (cpt+1)%images.length;
    			repaint();
    			try {
    				Thread.sleep(1000);
    			} catch (InterruptedException e) {}
    		}
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame("Diaporama");
    		frame.setSize(800, 600);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setContentPane(new Diaporama());
    		frame.setVisible(true);
    	}
     
    }

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

Discussions similaires

  1. [XML/CSS/XSL] Problème d'affichage des images "dynamiqu
    Par popol55 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 06/04/2006, 16h24
  2. Problème d'affichage d'image...
    Par fabreizhad dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/03/2006, 12h43
  3. problème d'affichage d'image avec mozilla
    Par lyon31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/03/2006, 16h27
  4. Problème d'affichage d'image
    Par AurelBUD dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/09/2005, 11h56
  5. CSS Probléme d'affichage d'images
    Par tebonb dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 01/06/2005, 18h35

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