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 avec ActionListener et l'exéecution d'une fonction Diaporama


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème avec ActionListener et l'exéecution d'une fonction Diaporama
    Bonsoir à tous,
    j'ai vraiment besoin de votre aide.

    Je suis débutante en Java et je fais actuellement face à un problème. En fait j'ai créé une fonction pour lecture d'un diaporama cependant quand je clique sur le bouton, toutes les images ne s'affichent pas sauf la dernière, j'ignore pourquoi. Aidez moi s'il vous plaît.

    Voici mon code pas entier mais les parties concernées:
    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
    public class Essai implements ActionListener {
     
        /**
         * @param args the command line arguments
         */
        JButton button1;
        JButton button2;
        JButton button3;
        JFrame frame;
        JFrame diapo;
        JLabel label;
        JLabel labelDiapo;
        static ImageIcon img;
     
        static int inc = 0;
        static File repertoire = new File("C:\\Users\\Invité\\Desktop\\diap");
        static String TabImage[] = repertoire.list();
     
        static Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        static int hauteur = (int)tailleEcran.getHeight();
        static int largeur = (int)tailleEcran.getWidth();
     
     
     
    public static void main(String[] args) {
            // TODO code application logic here
     
             Essai e = new Essai();
     
             e.frame = new JFrame("Diaporama");
     
             e.button1 = new JButton("Précédent");
             e.button2 = new JButton("Suivant");
             e.button3 = new JButton("Lancer le Diaporama");
     
             e.img = new ImageIcon("C:\\Users\\Invité\\Desktop\\diap\\" + TabImage[inc]);
             e.label = new JLabel("", new ImageIcon(img.getImage().getScaledInstance(500, 360,Image.SCALE_DEFAULT)), JLabel.CENTER );
     
             e.button1.addActionListener(e);
             e.button2.addActionListener(e);
             e.button3.addActionListener(e);
     
             e.frame.add(e.button1, BorderLayout.EAST);
             e.frame.add(e.button2, BorderLayout.WEST);
             e.frame.add(e.button3, BorderLayout.SOUTH);
             e.frame.add(e.label);
     
             e.frame.setSize(600, 400);
             e.frame.setVisible(true);
     
           //e.Diaporama(frame);
     
        }
    actionperformed
    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
          public void actionPerformed(ActionEvent event) {
     
                if (event.getSource() == button1){
                    inc--;
                    if (inc > TabImage.length-1 ){
                        inc = 0;
                    }else if (inc < 0){
                        inc = TabImage.length-1 ;
                    }
                    defile(inc);
                }
                else if (event.getSource() == button2) {                
                    inc++;
                    if (inc > TabImage.length-1 ){
                        inc = 0;
                    }else if (inc < 0){
                        inc = TabImage.length-1 ;
                    }
                    defile(inc);
                }
                else if (event.getSource() == button3){
     
                    diapo = new JFrame("Diaporama Plein Ecran");
                    labelDiapo = new JLabel("", new ImageIcon("C:\\Users\\Invité\\Desktop\\diap\\aston.jpg" ),JLabel.CENTER );
                    diapo.add(labelDiapo);
     
                    diaporama();
                }
     
     
            }
    La fonction Diaporama en question
    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
       public void diaporama(){
            int i = 0;
     
            while (i<TabImage.length){
     
                ImageIcon img1 = new ImageIcon("C:\\Users\\Invité\\Desktop\\diap\\" + TabImage[i]);
     
                labelDiapo.setIcon(new ImageIcon(img1.getImage().getScaledInstance(largeur, hauteur,Image.SCALE_DEFAULT)));
                labelDiapo.repaint();
     
                diapo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                diapo.add(labelDiapo);
                pauseTime(3);
                diapo.setSize(largeur, hauteur);
                diapo.setVisible(true);
     
                i++;
     
            }
        }
    Je vous remercie de votre aide!!

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Tu aimerais avoir les images qui defilent ?

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ta méthode diaporama() est appelée dans l'évènement actionPerformed d'un bouton, donc sur l'EDT, c'est-à-dire le thread qui gère l'ensemble des traitements de SWING, comprenant l'affichage lui-même. Or, l'affichage ne peut être effectif que lorsque les traitements effectués dans l'EDT sont finis. C'est pourquoi tu ne peux voir que la dernière image.

    Il faut exécuter le code de diaporama() dans un autre thread que l'EDT, l'appel de repaint() que tu fais dans cette méthode étant suffisant pour demander à l'EDT de rafraichir l'affichage.
    Tu peux faire un simple Thread, par exemple, pour lequel la méthode run() appelle directement diaporama(), simplement en remplaçant l'appel de cette méthode dans actionPerformed par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    new Thread() { 
       public void run() {
           diaporama();
       } 
    }.start();
    Tu peux également utiliser un Timer. Ou un SwingWorker.

    Autre chose, au sujet de cette séquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    diapo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    diapo.add(labelDiapo);
    pauseTime(3);
    diapo.setSize(largeur, hauteur);
    diapo.setVisible(true);
    Ce qui est en rouge, diapo.add(labelDiapo);, ne sert à rien : tu as déjà ajouté ce composant, pas la peine de le remettre.

    Ce qui est en orange, n'a pas besoin d'être répété à chaque nouvelle diapo : autant le faire une fois pour toute avant de lancer le thread.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/09/2011, 08h42
  2. Problème avec if .. else if.. else dans une fonction
    Par marwa21 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/04/2011, 10h37
  3. Réponses: 3
    Dernier message: 07/05/2008, 13h30
  4. Problème d'execution d'une fonction
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 17/03/2006, 11h37
  5. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 19h56

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