Image+diaporama

khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010 - 24 avril 2008 à 20:47
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010 - 25 avril 2008 à 23:44
j'ai un projet Java dont le but créé une application (graphique) qui permet d'importer des images à partir d'un repertoire donné et les affiches , aussi les mettre au mode Diaporama , (signalant que je suis debutant en Java) alors
j'ouvre File>new>project et je le nomme OpenImage et dans la page OpenImage.Java j'ecrit la Class main suivant :
 
publicclass OpenImage
{
publicstaticvoid main(String args[])
{
java.awt.EventQueue.invokeLater(new Runnable())
{
publicvoid run()
{
new OpenImage().setVisible(true);
}
}

try
{
BufferedImage img = ImageIO.read(new File("F:/img2.gif"));
JFrame frame = new JFrame("Demo load image");
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.pack();
frame.setVisible(true);
}catch(IOException e){
e.printStackTrace();
}
}
}
 
 
 
 
 
 
puis dans la page OpenImageFrame.Java j'ecrit:
 
 
 
 
 
 
 
 
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.io.*;
import java.beans.*;
import javax.swing.*;
import java.util.*;
 
 
/**
* Sample application using Frame.
*
* @author
* @version 1.00 08/04/24
*/
publicclass OpenImage extends javax.swing.JFrame
{

/** Creates new form OpenImage */
public OpenImage(){
initComponents();
}
 
 
privatevoid initComponents(){
jButton1 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
 
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("open");
 
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 349, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 140, Short.MAX_VALUE)
);
 
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(157, 157, 157)
.add(jButton1))
.add(layout.createSequentialGroup()
.add(20, 20, 20)
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(31, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(23, 23, 23)
.add(jButton1)
.add(49, 49, 49)
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(65, Short.MAX_VALUE))
);
pack();
 
privatevoid jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
publicclass Bean1 extends Canvas implements Serializable, PropertyChangeListener
{
// Tableau d'images.
private Image[] image;
// Chemin d'acces aux images.
private File path;
// Tableau de noms d'images.
private String[] list;
// Indice d'image dans le tableau.
privateint numero;
// Booleen permettant d'activer le mode diaporama.
privateboolean diapo;
// Booleen permettant d'activer le mode boucle.
privateboolean loop;
// Attribut permettant de choisir la temporisation dans l'affichage.
privateint tempo;
// Attribut permettant de choisir le repertoire d'images.
private String rep="Z:\\bean\\dessins\";
// Gestion de la notification des changements.
private PropertyChangeSupport changement;
// Vecteur contenant les evenements du aux changements d'images.
private Vector imageChangeListeners=new Vector();
 
// Constructeur de la classe.
public Bean1(){
try{
path=new File(rep);
list=path.list(new MyFilenameFilter());
image=new Image[list.length+1];
numero=0;
diapo=false;
loop=false;
tempo=500;
changement = new PropertyChangeSupport(this);
chargeImage();
}
catch(Exception ex){
ex.printStackTrace();
}
addPropertyChangeListener(this);
}

// Chargement des images du repertoire.
publicvoid chargeImage(){
numero=0;
for(int i=0;i<list.length;i++){
image[i] = getToolkit().getImage( rep + list[i]);
prepareImage(image[i], this);
}
setSize(250,250);
}

// Affichage des images et test du mode diaporama.
publicsynchronizedvoid paint(Graphics g){
g.drawImage(image[numero], 0, 0, this);
if(diapo==true)
{
notifyImageChange(image[numero],list[numero]);
try{
Thread.sleep(tempo);
}
catch(InterruptedException e){System.out.println("Erreur");}
if((numero==list.length-1) && (loop==false))
diapo=false;
suivant();
}
}

// Affichage de la premiere image.
publicvoid debut(){numero=0;repaint();}

// Affichage de l'image suivante.
publicvoid suivant(){
if(numero==list.length-1) numero=0;
else numero++;
repaint();
}

// Affichage de l'image precedente.
publicvoid precedent(){
if(numero==0)
numero=list.length-1;
else
numero--;
repaint();
}

// Affichage de la derniere image.
publicvoid fin(){
numero=list.length-1;
repaint();}
 
 

/**
* Shutdown procedure when run as an application.
*/
protectedvoid windowClosed(){

// TODO: Check if it is safe to close the application

// Exit application.
System.exit(0);
}
}
}
}
 
 
le probleme est lors du compilation elle ne donne aucun erreur (Build Output : Process completed.)
mais Task List me donne des erreur que je ne trouve pas comment les corrigées et lors de l'execution
il m'affiche cette message ds msd : Exception in thread "main" java.lang.NoClassDefFoundError: OpenImage
Press any key to continue .
et merci d'avance .

15 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 22:11
Ta façon de coder m'embrouille un peu mais je peux quand même t'indiquer qu'une classe doit absolument porter le même nom que le fichier dans lequel tu l'écris. Autrement dit, dans un fichier OpenImageFrame.java, tu ne peux définir qu'une classe OpenImageFrame (et d'autres classes à l'intérieur de cette classe si tu veux (pas indiqué, sauf pour les petits écouteurs et autres). Par curiosité, tu utilises quel IDE pour qu'il te compile des trucs pareils?
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
24 avril 2008 à 22:54
merci pour le reponse ,
j'utilise JCreator ,et oui j'ai changer le nom du classe mais le probleme est le meme
(d'abord tu m'a compri mon but?)
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 23:02
Désolé je ne peux pas t'aider, je ne connais pas JCreator, si un jour tu as envie de changer, essaie Eclipse ou NetBeans.
Apparemment tu utilises un outil WYSIWYG pour créer tes interfaces graphiques. Je trouve que le code est absolument immonde sans compter qu'il utilise des librairies externes du coup nous on peut pas tester facilement ton code.
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
24 avril 2008 à 23:07
je peut travailler par netbeans il est installer sur mon PC et le Prof nous conseiller de travailler par lui , si tu as une idée comment je peut implimenter se code je serait trés
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
24 avril 2008 à 23:12
cad est ce que je peut prendre le code tel quel est et le mettre dans Netbeans?
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
24 avril 2008 à 23:13
j'ai oublié de te signaler que j'ai Netbeans 5.0
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 23:30
Voilà je t'ai fait un exemple que je viens de faire. Change juste le nom du repertoire qui ne donnera rien chez toi ;).
N'oublie pas de mettre \\ au lieu de \ dans la chaîne de caractères. A part ça bah si ça fonctionne pas reposte.
Pour limiter les difficultés, tout est dans une classe donc tu ne devrais pas avoir de mal à le passer dans NetBeans :









import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class Diaporama extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;

    private String folder;

    private String[] images;

    private int index;

    private JLabel image;

    public Diaporama(File folder) {
        super("Diaporama");
        images = folder.list();
        this.folder = folder.getAbsolutePath();
        index = 0;

        setSize(800, 600);
        image = new JLabel();
        add(new JScrollPane(image));

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public void lireImage(String imageName) throws IOException {
        System.out.println(folder + imageName);
        image.setIcon(new ImageIcon(ImageIO.read(new File(folder + "\"
                + imageName))));
    }

    public void run() {
        while (true) {

            try {
                lireImage(images[index]);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NullPointerException e) {
            }

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            index = (index + 1) % images.length;

        }
    }

    public static void main(String[] args) {
        Diaporama diap = new Diaporama(new File(
                "E:\\Photos\\2006 - 07 - Appartement - Pontivy"));
        new Thread(diap).start();
    }
}
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
25 avril 2008 à 00:13
comme tu voi je suis debutant (c'est mnt que je decouvert Netbeans) voila ce que je'ai fait: File>New project>General>Java application>Next>Projet name : OpenImage >finish. ( est ce que c'est ça ce que je doit faire?)
enfin je recopie le code dans la fenetre qui s'affiche est je fait F6 .
mais je ne vois pas des et il y a des croix rouge devant des lignes mais il n'y a pas des fautes ?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 avril 2008 à 00:34
D'habitude j'utilise Eclipse mais là pour comparer, j'ai installé NetBeans.

Personnellement, dans l'ordre j'ai fait :

File > New project > Java > Java Application

Mais comme j'ai la version 6.0 je pense que c'est équivalent.

Ensuite j'ai appelé mon projet Test1 (ça on s'en fout), j'ai décoché "create main class".
Encore une fois, il est possible que sur ta version tu n'aies pas les mêmes options.

Ensuite j'ai cliqué sur Finish.

Après ça j'ai fait un clic droit sur le dossier SourcePackages et j'ai choisi new java class

Je l'ai appelé "Diaporama" et j'ai cliqué sur Finish.

Enfin, dans la zone de texte qui est apparue à droite (Diaporama.java), j'ai effacé le contenu déjà écrit et j'ai remplacé par ce le code que je t'ai fourni.

à savoir :

import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class Diaporama extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;

    private String folder;

    private String[] images;

    private int index;

    private JLabel image;

    public Diaporama(File folder) {
        super("Diaporama");
        images = folder.list();
        this.folder = folder.getAbsolutePath();
        index = 0;

        setSize(800, 600);
        image = new JLabel();
        add(new JScrollPane(image));

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public void lireImage(String imageName) throws IOException {
        System.out.println(folder + imageName);
        image.setIcon(new ImageIcon(ImageIO.read(new File(folder + "\"
                + imageName))));
    }

    public void run() {
        while (true) {

            try {
                lireImage(images[index]);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NullPointerException e) {
            }

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            index = (index + 1) % images.length;

        }
    }

    public static void main(String[] args) {
        Diaporama diap = new Diaporama(new File(
                " E:\\Photos\\2006 - 07 - Appartement - Pontivy "));
        new Thread(diap).start();
    }
}
<hr size ="2" width="100%" />
Enfin, j'ai cliqué sur le petit triangle vert (F6).

Il m'a demandé quelle classe je voulais lancer, jai sélectionné Diaporama et j'ai cliqué sur OK.

Ca a fonctionné.

Eventuellement expliques nous plus en détail les erreurs correspondant à tes croix rouges ou alors fais un screenshot.
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
25 avril 2008 à 01:12
bon j'ai fait exactement commeça mais comme mais je pense qu'il y a des petites erreur qu'il faut les corriger , voila le code comme je le mis et je vé mettre les erreur en rouge devant  ses lignes ( je vous remerci pour votre patience)

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.io.*;
import java.beans.*;
import javax.swing.*;
import java.util.*;
 

/**
 * Sample application using Frame.
 *
 * @author
 * @version 1.00 08/04/24
 */
public class OpenImage extends javax.swing.JFrame
 {
       
       
   
    /** Creates new form OpenImage */
    public OpenImage() {
        initComponents();
        }

 private void initComponents() {
        jButton1 = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setText("open");

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 349, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 140, Short.MAX_VALUE)
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(157, 157, 157)
                        .add(jButton1))
                    .add(layout.createSequentialGroup()
                        .add(20, 20, 20)
                        .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(31, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(23, 23, 23)
                .add(jButton1)
                .add(49, 49, 49)
                .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(65, Short.MAX_VALUE))
        );
        pack();
(illegal start of expression) private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
 {

(';'expected)public class Bean1 extends Canvas implements Serializable, PropertyChangeListener
     {
    // Tableau d'images.
    private Image[] image;
    // Chemin d'acces aux images.
    private File path;
    // Tableau de noms d'images.
    private String[] list;
    // Indice d'image dans le tableau.
    private int numero;
    // Booleen permettant d'activer le mode diaporama.
    private boolean diapo;
    // Booleen permettant d'activer le mode boucle.
    private boolean loop;
    // Attribut permettant de choisir la temporisation dans l'affichage.
    private int tempo;
    // Attribut permettant de choisir le repertoire d'images.
    private String rep="Z:\\bean\\dessins\";
    // Gestion de la notification des changements.
    private PropertyChangeSupport changement; 
    // Vecteur contenant les evenements du aux changements d'images.
    private Vector imageChangeListeners=new Vector();
 
    // Constructeur de la classe.
    public Bean1(){
    try {
        path=new File(rep);
        list=path.list(new MyFilenameFilter());
        image=new Image[list.length+1];
        numero=0;
        diapo=false;
        loop=false;
        tempo=500;
        changement = new PropertyChangeSupport(this);
        chargeImage();
    }
    catch(Exception ex) {
        ex.printStackTrace();
    }
    addPropertyChangeListener(this);
    }
   
    // Chargement des images du repertoire.  
    public void chargeImage(){
    numero=0;
    for(int i=0;i<list.length;i++){
        image[i] = getToolkit().getImage( rep + list[i]);
        prepareImage(image[i], this);
    }
    setSize(250,250);
    }
   
    // Affichage des images et test du mode diaporama.
    public synchronized void paint(Graphics g){
    g.drawImage(image[numero], 0, 0, this);
    if (diapo==true)
    {
        notifyImageChange(image[numero],list[numero]);
        try{
        Thread.sleep(tempo);
        }
        catch(InterruptedException e){System.out.println ("Erreur");}
        if((numero==list.length-1) && (loop==false))
        diapo=false;
        suivant();
    }
    }
   
    // Affichage de la premiere image. 
    public void debut(){numero=0;repaint();}
   
    // Affichage de l'image suivante.
    public void suivant(){
    if(numero==list.length-1) numero=0;
    else numero++;
    repaint();
    }
   
    // Affichage de l'image precedente.
    public void precedent(){
    if(numero==0)
        numero=list.length-1;
    else
        numero--;
    repaint();
    }
   
    // Affichage de la derniere image.
    public void fin(){
    numero=list.length-1;
    repaint();}
 

   
    /**
     * Shutdown procedure when run as an application.
     */
    protected void windowClosed() {
       
        // TODO: Check if it is safe to close the application
       
        // Exit application.
        System.exit(0);
    }
}
}

 

 public static void main(String args[])
 {
 (';' expected) java.awt.EventQueue.invokeLater(new Runnable())
        {
            public void run()
            {
                new OpenImage().setVisible(true);
            }
        }
       
    
       
            try
            {
            BufferedImage img = ImageIO.read(new File("F:\\img2.gif"));
            JFrame frame = new JFrame("Demo load image");
            frame.getContentPane().add(new JLabel(new ImageIcon(img)));
            frame.pack();
            frame.setVisible(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 }
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
25 avril 2008 à 01:29
excuse moi je doit partir, dem1 j'ai des etudes , 
je connectera  apres midi , je compte sur vous
merci et bonne nuit .
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 avril 2008 à 08:21
C'est normal que ça ne compile pas, ce n'est pas du java correct (c'est le code que tu as développé avec JCreator), essaie avec le code que je t'ai donné 2 fois dans mes posts précédents.
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
25 avril 2008 à 21:04
bonjour,
oui ton code marche bien mais je cherche à importer les image par un clic sur un boutton "open" et les lister , un autre bouton de " diaporama" .
pas faire entrer le chemin du repertoire à lister dans le code
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 avril 2008 à 22:12
Salut,

Pour ouvrir des fichiers tu peux faire un JFileChooser en appelant la méthode showOpenDialog dessus tu as une fenêtre d'ouverture de fichier toute faite.
Je peux te donner un code complet si tu veux. Tout dépend de si tu veux apprendre à programmer ou si tu veux juste un diaporama tout fait. Si j'ai le temps ce weekend j'essaierai de de donner une version corrigée du code que tu as déjà.
0
khallou2007 Messages postés 51 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 13 juillet 2010
25 avril 2008 à 23:44
salut [auteur/JOJOLEMARIOLE/1012781.aspx jojolemariole]
 je serait trés  reconnaissant si tu as un code complet
et moi je vé essaiyer de corriger mon code
merci.
0