JPanel + JScrollPane [Résolu]

kels0 5 Messages postés mercredi 30 janvier 2008Date d'inscription 6 juin 2008 Dernière intervention - 12 mars 2008 à 14:35 - Dernière réponse : uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention
- 13 mars 2008 à 01:02
Bonjour !

Je souhaite créer un composant Java, qui permet de visualiser un répertoire contenant des images sous forme de miniature, un peu comme dans l'explorateur windows.

J'ai donc pensé utiliser un JPanel, qui affichera un maximum de miniature en fonction de la taille de la fenêtre (ce que fait très bien JPanel sans JScrollPane).

Mais j'ai un souci, les images ce place en ligne, au lieu de prendre tout l'espace, comme un JPanel ferait normalement ! JScrollBarPane, modifie, je pense, les propriété de mon JPanel contenant les images (gd).

class fenetre extends JFrame {
 
    Image imgs;
    File fl;
    JPanel gd,main;
    JScrollPane js;
   
    fenetre() throws IOException {
        setSize(400,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);    
       
        fl = new File("C:\\Documents and Settings\\kelso\\Mes documents\\Mes images\\1077.jpg");
        imgs = ImageIO.read(fl);
       
        gd = new JPanel();
        main = new JPanel();
       
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));
        gd.add(new JLabel(new ImageIcon(imgs.getScaledInstance(200, 150, Image.SCALE_DEFAULT))));

       js = new JScrollPane(gd);
       main.add(js);

       add(main);
      
      
        setVisible(true);
    }
}

Merci
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 12 mars 2008 à 18:12
3
Merci
gd.setPreferredSize(new Dimension(400,1000));
main = new JPanel(new BorderLayout());

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de uhrand
kels0 5 Messages postés mercredi 30 janvier 2008Date d'inscription 6 juin 2008 Dernière intervention - 12 mars 2008 à 19:33
0
Merci
Merci, ça marche, mais pas à 100%, car si je mais 1000 dans PreferredSize, j'ai une longue zone vide, et si j'ai un trop grande nombre de photos, et que je dépasse le 1000 en dimension, je peux plus acceder en scrollant.

Y a t-il un moyen de modifier la taille à la volé, en fonction du nombre de miniature ?
Commenter la réponse de kels0
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 13 mars 2008 à 01:02
0
Merci
class fenetre extends JFrame {
...
    fenetre() throws IOException {
...
        recalculateSize();
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e) {
                recalculateSize();
            }
        });
    }
    private void recalculateSize() {
        FlowLayout layout = ((FlowLayout) gd.getLayout());
        int count = gd.getComponentCount();
        int columnW = 200 + layout.getHgap();
        int columnH = 150 + layout.getVgap();
        int panelW = columnW;
        JViewport viewport = (JViewport) gd.getParent();
        if (viewport != null) {
            panelW = viewport.getExtentSize().width;
        }
        int columns = panelW / columnW;
        int rows = count / columns;
        if (count % columns != 0) {
            rows++;
        }
        int panelH = rows * columnH;
        gd.setPreferredSize(new Dimension(panelW, panelH));
        gd.revalidate();
    }
...
}
Commenter la réponse de uhrand

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.