3

私はコンピュータサイエンスプロジェクトに取り組んでいますが、問題の解決策を見つけることができませんでした。JPanelを介して画像を含むの2D配列を作成していGridLayoutます。すべてのパネル間のパディング/マージンを削除して、1つの画像に見かけ上流れないようにします。ただし、setHGapメソッドとsetVGapメソッドは役に立たないようです。ご返信いただければ幸いです。ありがとうございました。

import java.awt.GridLayout;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MapArray {

    static JPanel[][] tiles = new JPanel[11][11];

    public MapArray() {
    }

    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = Map.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setSize(325, 300);
                GridLayout layout = new GridLayout(10, 10);
                frame.setLayout(layout);

                for (int i = 0; i < 10; i++) {
                    for (int j = 0; j < 10; j++) {
                        tiles[i][j] = new JPanel();
                        tiles[i][j].add(new JLabel(
                            createImageIcon("tile-1.png")));
                        frame.add(tiles[i][j]);
                    }
                }

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.validate();
                frame.repaint();
            }
        });
    }
}
4

1 に答える 1

7

いくつかの注意:

  • 各パネルにを与えますGridLayout

  • ループ制限には配列の長さを使用します。

  • 可能な場合は定数をリファクタリングします。

コード:

import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MapArray {

    private static final int SIZE = 4;
    private static final JPanel[][] tiles = new JPanel[SIZE][SIZE];

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setLayout(new GridLayout(SIZE, SIZE));
                for (int i = 0; i < tiles.length; i++) {
                    for (int j = 0; j < tiles[0].length; j++) {
                        tiles[i][j] = new JPanel(new GridLayout());
                        tiles[i][j].add(new JLabel(
                            new ImageIcon("image.gif")));
                        frame.add(tiles[i][j]);
                    }
                }
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
于 2012-04-04T01:27:10.233 に答える