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éfilement d'images dans une fenêtre


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Par défaut Défilement d'images dans une fenêtre
    Je souhaite, après un clic sur un bouton, vérifier dans un dossier si une image est existante, si elle l'est je l'affiche puis je vérifie si l'image suivante est présente.
    Un exemple est plus parlant, en fait je regarde si Canard1.jpg est présente dans le dossier E:/photos/ si elle l'est je l'affiche pendant 4 seconde, puis je recherche si Canard2.jpg est existente, si elle l'est je l'affiche pendant 4sec, pareil avec Canard3.jpg, et ainsi de suite.

    Le problème c'est que mes images ne s'affiche que quand la boucle for est finie

    J'ai une classe Fenetre Visualisation qui contient le code d'affichage de la fenetre et la methode qui test l'existence de l'image.
    Une classe AffichageImage qui hérite de Canvas qui permet d'afficher l'image.
    Et une classe attente qui hérite de thread qui me permet de faire la pause de 4sec.

    la classe FenetreVisualisation :

    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
     
    package essaivisualisation;
     
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.io.File;
     
     
    public class FenetreVisualisation extends javax.swing.JFrame {
        Image img;
        String fichier;
        int i=1;
        File file;
        Attente attente=new Attente();
     
        public FenetreVisualisation() {
            initComponents();
        }
     
     
     
        public void testExistenceImage(){
            for(int j=0;j<5;j++){
                fichier="E:\\photos\\Canard"+i+".jpg";
                System.out.println("fichier: "+fichier);
                file=new File(fichier);
     
                if (file.exists()==true){
                    AffichageImage image = new AffichageImage(fichier);
                    this.add(image);
                    attente.attendre(4000);
                    System.out.println("image "+i+" existence");
                    i++;
     
                }
            }
        }
     
    private void initComponents() {
    //contient le code généré par netbeans que j'ai supprimer pour le forum}
     
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            testExistenceImage();
        }                                        
     
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        // End of variables declaration                   
     
    }
    La classe AffichageImage:
    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
    package essaivisualisation;
     
    import java.awt.Canvas;
    import java.awt.*;
    import java.awt.Image;
    import java.awt.Toolkit;
     
     
    public class AffichageImage extends Canvas {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int largeurEcran = screenSize.width;
        int hauteurEcran = screenSize.height;
        Image image;
     
        public AffichageImage(String url) {
            image = getToolkit().getImage(url);
            prepareImage(image, this);
     
        }
     
        public void paint(Graphics g) {
            g.drawImage(image, 0, 0, this);
        }
     
        public boolean imageUpdate(Image image, int info, int x, int y, int l, int h) {
            if ((info & (WIDTH | HEIGHT)) != 0) {
                setSize(l, h);
                getParent().getParent().getParent().getParent().setBounds( (largeurEcran - l) / 2, (hauteurEcran - h) / 2, l+8, h+32 );
            }
     
            if ((info & (ALLBITS)) != 0) {
                repaint();
                return false;
            } else {
                return true;
            }
        }
    }
    La classe attente:
    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
    package essaivisualisation;
     
    public class Attente extends Thread {
        int attente;
     
        public Attente() {
     
     
        }
     
     void attendre(int attente){
            try {
                this.sleep(attente);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
     
    }
    et le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package essaivisualisation;
     
    public class Main {
     
        public Main() {
        }
     
     
        public static void main(String[] args) {
            FenetreVisualisation fen=new FenetreVisualisation();
            fen.setVisible(true);
        }
     
    }
    merci d'avance

  2. #2
    Membre Expert
    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
    Par défaut
    Je m'étonne... tu sembles utiliser Netbeans, et je vois un main beugué dont la conception date de matusalem ?? Prends une version de Netbeans plus récente de toute urgence. (et regarde le nouveau code généré pour le main des JFrame).

    A defaut, regarde Your First Swing Program.

    A part cela, lorsque l'on travaille d'un coté avec une GUI, d'autre part avec des événements tiers (lecture de fichiers, temporisations), il faut s'intéresser à la notion de Dispatching Thread.

    Pour cela, regarde Threads et performance avec Swing, ou Concurrency in Swing, par exemple.

    Tu seras sans doute conduit à modifier un peu ton logiciel pour réserver la place qui lui revient à ce fameux dispatching thread, et je te conseille en plus de remplacer le sleep par un Timer.

    Durant tout ce travail, n'hésite pas à nous solliciter s'il y a quelque chose que tu ne comprends pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Par défaut
    J'ai beau lire tous les conseils que proposent tes liens, je n'arrive pas à résoudre mon problème.
    Peut-être que je ne devrais pas utiliser les Canvas. Je dois pas être le premier a vouloir faire défiler des images mais malheureusement je ne trouve rien sur le net.

  4. #4
    Membre Expert
    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
    Par défaut
    • effectivement, pas de Canvas, mais plutôt un JPanel ou un JComponent.
    • et où en es-tu de l'usage du dispatching thread ?

Discussions similaires

  1. Pb d'affichage d'une image dans une fenêtre IE7
    Par NastyBoy dans le forum VBScript
    Réponses: 1
    Dernier message: 16/05/2007, 14h52
  2. [PB 10.5] Afficher une image dans une fenêtre
    Par cagoule dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 27/02/2007, 22h22
  3. Problème d'insertion d'image dans une fenêtre.
    Par Antigonos Ier Gonatas dans le forum Tkinter
    Réponses: 2
    Dernier message: 26/08/2006, 12h44
  4. afficher une image dans une fenêtre windows
    Par yashiro dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 02/05/2006, 16h30
  5. Affichage d'images dans une fenêtre
    Par tonycalv dans le forum MFC
    Réponses: 6
    Dernier message: 20/04/2005, 20h02

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