Galerie photo [Résolu]

Messages postés
2
Date d'inscription
vendredi 2 juin 2017
Dernière intervention
3 juin 2017
-
j'aimerai pouvoir afficher tous les images dans un Jlabel voici ma méthode qui ne fonctionne pas merci

public class Photo1 extends JFrame{

    private JPanel panel = new JPanel()  ;
    File sourceimage = new File("./Images");
    String [] listImg = sourceimage.list();
    ImageIcon img = new ImageIcon(sourceimage + listImg[0]);
   
   
    JLabel lblImage ;
        public Photo1 () {
       
        for (int i = 0; i <  listImg.length; i++) {
           
            JLabel lblImage = new JLabel(img);
            panel.add(lblImage);
        }
        panel.setLayout(new GridLayout(0, 3));
       add(panel,BorderLayout.CENTER);
       
          }
Afficher la suite 

Votre réponse

1 réponse

Messages postés
15854
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 décembre 2018
0
Merci
Bonjour,

Voici un exemple :

import java.awt.GridLayout;
import java.awt.MediaTracker;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Photo1 extends JFrame {

    private static final long serialVersionUID = 1L;

    public Photo1(File path) {
        File[] files = path.isDirectory() ? path.listFiles() : new File[] { path };

        List<JLabel> labels = Arrays.stream(files).parallel() //
                .map(File::getAbsolutePath) //
                .map(ImageIcon::new) //
                .filter(icon -> icon.getImageLoadStatus() == MediaTracker.COMPLETE) //
                .map(JLabel::new) //
                .collect(Collectors.toList());

        int dim = (int) Math.ceil(Math.sqrt(labels.size()));
        setLayout(new GridLayout(dim, dim));

        labels.forEach(this::add);

        setSize(800, 600);
        setExtendedState(MAXIMIZED_BOTH);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Photo1(new File("./Images"));
    }
}
KX
Messages postés
15854
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 décembre 2018
-
Remarque : si on veut conserver les dimensions d'origine des images on peut surcharger le JLabel pour considérer à la volée la taille de la fenêtre et faire le redimensionnement de l'image lorsqu'elle est redessinée.

Exemple en remplaçant le
.map(JLabel::new)
de la ligne 23 par :

.map(icon -> new JLabel(icon) {
    public void paint(Graphics g) {
        draw(g, icon);
    }
})

Et en rajoutant la méthode
draw(g, icon)
à la classe Photo1 :

private void draw(Graphics g, ImageIcon icon) {
    GridLayout grid = (GridLayout) getContentPane().getLayout();
    int columnWidth = getWidth() / grid.getColumns();
    int rowHeight = getHeight() / grid.getRows();
    double iconWidth = icon.getIconWidth();
    double iconHeight = icon.getIconHeight();
    double ratio = Math.max(iconWidth / columnWidth, iconHeight / rowHeight);
    g.drawImage(icon.getImage(), 0, 0, (int) (iconWidth / ratio), (int) (iconHeight / ratio), this);
}
potentielJava
Messages postés
2
Date d'inscription
vendredi 2 juin 2017
Dernière intervention
3 juin 2017
-
Merciiiii c'est top
Commenter la réponse de KX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.