Bonsoir

Mon but est d'afficher toutes les images contenues dans un répertoire.

A la base, je dispose d'un panel (qui est une composante de ma frame), qui contient un autre panel (nommé pListeImages) via un jScrollPane. Le but de pListeImages est d'afficher une liste de petits panels (PanelImages) affichant chacun l'image (ImageIcon contenue dans un JLabel) et le nom de cette images (dans un JLabel également). Voici le code de cette classe:

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
package picado.explorateur.recherche;
 
import javax.swing.ImageIcon;
import javax.swing.JLabel;
 
public class PanelImage extends javax.swing.JPanel {
    /** l'image */
    private ImageIcon image;
    /** le nom de l'image */
    private String nom;
    /** le path de l'image */
    private String path;    
 
    /** Creates new form PanelImage */
    public PanelImage() {
        initComponents();
    }
 
    private void initComponents() {
        ... // supprimé pour les besoins de l'affichage
 
    }                    
        /** 
         *  Constructeur 
         *  @param  img         l'image
         *  @param  lab         le nom de l'image
         *  @param  fileName    le chemin absolu de l'image
         **/
        public PanelImage(ImageIcon img, String lab, String fileName){
            this.image = img;
            this.nom = lab;
            this.path = fileName;
        }
 
        /**
         *  Permet l'initialisation et l'instantiation des différents objets du panel
         **/
        public void initPanel(){
// nb: j'ai du instancier les JLabel, qui sont pourtant des composantes 
//      de mon panel, sinon j'avais droit à un 'Chemin invalide'
            this.lImage = new JLabel(this.image);
            this.lNom = new JLabel(this.nom);
        }
 
        /**
         *  Retourne la référence de l'IconImage
         *  @return référence vers l'image
         */
        public ImageIcon getImage(){
            return this.image;
        }
 
        /**
         *  Retourne le nom de l'image correspondant à l'icone
         *  @return nom de l'image
         */
        public String getNom(){
            return this.nom;
        }
 
        /**
         *  Retourne le chemin absolu vers l'image
         *  @return chemin absolu de l'image
         */
        public String getFileName(){
            return this.path;
        }
 
    private javax.swing.JLabel lImage;
    private javax.swing.JLabel lNom;                
}
A partir d'une autre classe (FiltreBrowser), je récupère un ArrayList<File> (attribut listeImages) contenant les chemins vers les images, je créé un tableau de PanelImage (qui va donc contenir tous les panels décrits plus haut) puis je lance un itérator sur l'ArrayList.
A chaque itération, j'instancie donc un nouveau PanelImage, puis une fois sorti, je lance une autre boucle, cette fois sur le tableau de PanelImage et j'exécute la méthode add de ces derniers sur le panel de premier niveau pListeImages et pour terminer, après la boucle, je lance un repaint sur pListeImages.
Voilà la méthode qui gère celà:

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
    /**
     *  Lance l'affichage des images contenues dans le répertoire
     */
    public void affichage(){
        this.panImage = new PanelImage[this.listeImages.size()];
        int i=0;
        Iterator iter = listeImages.iterator();
        while(iter.hasNext()){
            File file = (File)iter.next();
            // instanciation du nouveau PanelImage correspondant au fichier de l'itération courante
            this.panImage[i] = new PanelImage(new ImageIcon(Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath()).getScaledInstance(50,50,Image.SCALE_DEFAULT)),
                                                file.getName(),
                                                file.getAbsolutePath());
            // initialisation du PanelImage
            this.panImage[i].initPanel();        
            i++;
        }
 
        for(i=0;i<panImage.length;i++){
            pListeImages.add(this.panImage[i]);
        }
        pListeImages.repaint();
    }
Mon problème est que je n'arrive pas à afficher les PanelImage. Je n'ai pas codé d'algorithme de répartition des PanelImage dans pListeImages, mais j'ai essayé au cas par cas avec les méthodes setAlignementX et setAlignementY sur un dossier de deux images, résultat rien.

Est-ce que quelqu'un sait comment régler mon problème ? Est-ce que j'ai fait un oubli dans mon code (ça ne fait pas longtemps que je manipule SWING, il est facile d'oublier des trucs ) ???

Merci de vos réponses