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:
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:
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:
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:
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