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
278 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!

source:php.cn
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