Galerie photo [Résolu]

potentielJava 2 Messages postés vendredi 2 juin 2017Date d'inscription 3 juin 2017 Dernière intervention - 2 juin 2017 à 20:07 - Dernière réponse : potentielJava 2 Messages postés vendredi 2 juin 2017Date d'inscription 3 juin 2017 Dernière intervention
- 3 juin 2017 à 08:14
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 

3 réponses

Répondre au sujet
KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 2 juin 2017 à 23:22
0
Utile
2
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 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 3 juin 2017 à 00:21
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 2 Messages postés vendredi 2 juin 2017Date d'inscription 3 juin 2017 Dernière intervention - 3 juin 2017 à 08:14
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.