ホームページ > Java > &#&チュートリアル > スクロール可能な画像のサムネイルを SpringLayout グリッドに統合するにはどうすればよいですか?

スクロール可能な画像のサムネイルを SpringLayout グリッドに統合するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-01 13:28:17
オリジナル
278 人が閲覧しました

How to Integrate Scrollable Image Thumbnails into a SpringLayout Grid?

グリッド内のレイアウトに画像のサムネイルを追加する

課題:

リストの統合画像のサムネイルを SpringLayout フレーム内のグリッド システムに配置します。

解決策:

SpringLayout 内でサムネイルのグリッドを表示するには、カスタム コンテナを実装する必要があります。改善されたレスポンスは次のとおりです:

改善されたレスポンス:

SpringLayout 内でサムネイルのグリッドを表示するカスタム コンテナを作成できます。拡張ソリューションは次のとおりです。

  1. カスタム パネルの作成:

    • ImageGridPanel というカスタム JPanel サブクラスを作成します。
    • パネルの推奨サイズを計算するためにpreferredLayoutSize()を実装します。サムネイルの数とサイズに基づきます。
    • グリッド パターンでサムネイルを描画するには、paintComponent() をオーバーライドします。
  2. カスタム パネルを追加します:

    • ImageGridPanel インスタンスをJPanel フレーム。
    • SpringLayout 制約を使用して ImageGridPanel の位置とサイズを設定します。
  3. サムネイルの追加:

    • 各サムネイルを表す ImagePane コンポーネントを作成するimage.
    • ImagePane コンポーネントを ImageGridPanel に追加します。

コード スニペット:

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);
            }
        }
    }
}
ログイン後にコピー

追加考慮事項:

  • グリッド内でサムネイルをさらに配置して整列させるには、SpringLayout の使用を検討してください。
  • 効率を高めるには、別のスレッドで画像をロードしてスケールします。
  • ImageGridPanel をJScrollPane.

以上がスクロール可能な画像のサムネイルを SpringLayout グリッドに統合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート