Rumah >Java >javaTutorial >Bagaimana untuk Mengintegrasikan Imej Kecil Imej Boleh Tatal ke dalam Grid SpringLayout?

Bagaimana untuk Mengintegrasikan Imej Kecil Imej Boleh Tatal ke dalam Grid SpringLayout?

Patricia Arquette
Patricia Arquetteasal
2024-12-01 13:28:17225semak imbas

How to Integrate Scrollable Image Thumbnails into a SpringLayout Grid?

Menambahkan Imej Kecil Imej pada Reka Letak dalam Grid

Cabaran:

Menyepadukan senarai lakaran kenit imej ke dalam sistem grid dalam bingkai SpringLayout yang menampung menatal.

Penyelesaian:

Untuk memaparkan grid lakaran kenit dalam SpringLayout, anda perlu melaksanakan bekas tersuai. Berikut ialah respons yang dipertingkatkan:

Respons yang Dipertingkat:

Anda boleh mencipta bekas tersuai untuk memaparkan grid lakaran kecil dalam SpringLayout. Berikut ialah penyelesaian yang dipertingkatkan:

  1. Buat Panel Tersuai:

    • Buat subkelas JPanel tersuai yang dipanggil ImageGridPanel.
    • Laksanakan preferredLayoutSize() untuk mengira saiz pilihan panel berdasarkan bilangan dan saiz lakaran kenit.
    • Timpa paintComponent() untuk melukis lakaran kenit dalam corak grid.
  2. Tambah Panel Tersuai:

    • Tambahkan contoh ImageGridPanel pada JPanel bingkai.
    • Gunakan kekangan SpringLayout untuk meletakkan dan saiz ImageGridPanel.
  3. Tambah Thumbnail:

    • Buat komponen ImagePane untuk mewakili setiap lakaran kecil imej.
    • Tambahkan komponen ImagePane pada ImageGridPanel.

Snippet Kod:

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);
            }
        }
    }
}

Tambahan Pertimbangan:

  • Pertimbangkan menggunakan SpringLayout untuk meletakkan lebih jauh dan menjajarkan lakaran kecil dalam grid.
  • Untuk meningkatkan kecekapan, muatkan dan skala imej dalam urutan yang berasingan.
  • Sediakan kefungsian tatal dengan menambahkan ImageGridPanel pada a JScrollPane.

Atas ialah kandungan terperinci Bagaimana untuk Mengintegrasikan Imej Kecil Imej Boleh Tatal ke dalam Grid SpringLayout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn