Maison > Java > javaDidacticiel > Comment intégrer des vignettes d'images défilantes dans une grille SpringLayout ?

Comment intégrer des vignettes d'images défilantes dans une grille SpringLayout ?

Patricia Arquette
Libérer: 2024-12-01 13:28:17
original
311 Les gens l'ont consulté

How to Integrate Scrollable Image Thumbnails into a SpringLayout Grid?

Ajout de vignettes d'images à une mise en page dans une grille

Défi :

Intégrer une liste de vignettes d'images dans un système de grille dans un cadre SpringLayout qui accueille défilement.

Solution :

Pour afficher la grille de vignettes dans SpringLayout, vous devrez implémenter un conteneur personnalisé. Voici une réponse améliorée :

Réponse améliorée :

Vous pouvez créer un conteneur personnalisé pour afficher la grille de vignettes dans SpringLayout. Voici une solution améliorée :

  1. Créez un panneau personnalisé :

    • Créez une sous-classe JPanel personnalisée appelée ImageGridPanel.
    • Implémentez PreferredLayoutSize() pour calculer la taille préférée du panneau en fonction du nombre et de la taille des miniatures.
    • Remplacez paintComponent() pour dessiner les miniatures selon un motif de grille.
  2. Ajoutez le panneau personnalisé :

    • Ajoutez l'instance ImageGridPanel au cadre JPanel.
    • Utilisez Contraintes SpringLayout pour positionner et dimensionner l'ImageGridPanel.
  3. Ajouter des vignettes :

    • Créer des composants ImagePane pour représenter chaque image miniature .
    • Ajoutez les composants ImagePane au ImageGridPanel.

Extrait de code :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ImageGrid {

    public static void main(String[] args) {
        // Create the frame and panel.
        JFrame frame = new JFrame("Image Grid");
        JPanel panel = new JPanel();
        frame.add(panel, BorderLayout.CENTER);

        // Create the custom image grid panel.
        ImageGridPanel imageGridPanel = new ImageGridPanel();
        panel.add(imageGridPanel, BorderLayout.CENTER);

        // Add thumbnails to the image grid panel.
        for (int i = 0; i < 10; i++) {
            imageGridPanel.addImage(new ImageIcon("image" + i + ".png"));
        }

        // Set the frame properties.
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    static class ImageGridPanel extends JPanel {

        private List<ImageIcon> images;

        public ImageGridPanel() {
            setBackground(Color.WHITE);
            setLayout(null);
            images = new ArrayList<>();
        }

        public void addImage(ImageIcon image) {
            images.add(image);
            invalidate();
            repaint();
        }

        @Override
        public Dimension getPreferredSize() {
            int numImages = images.size();
            int numRows = (int) Math.ceil(Math.sqrt(numImages));
            int numCols = (int) Math.ceil(numImages / numRows);
            int width = numCols * 100;
            int height = numRows * 100;
            return new Dimension(width, height);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            int numImages = images.size();
            int numRows = (int) Math.ceil(Math.sqrt(numImages));
            int numCols = (int) Math.ceil(numImages / numRows);
            int width = getWidth() / numCols;
            int height = getHeight() / numRows;
            for (int i = 0; i < numImages; i++) {
                ImageIcon image = images.get(i);
                int row = i / numCols;
                int col = i % numCols;
                g.drawImage(image.getImage(), col * width, row * height, null);
            }
        }
    }
}
Copier après la connexion

Considérations supplémentaires :

  • Envisagez d'utiliser SpringLayout pour positionner et aligner davantage les vignettes dans le grille.
  • Pour améliorer l'efficacité, chargez et redimensionnez les images dans un fil de discussion séparé.
  • Fournissez une fonctionnalité de défilement en ajoutant ImageGridPanel à un JScrollPane.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal