Java GridLayout删除JPanel之间的填充

Java GridLayout删除JPanel之间的填充,java,arrays,swing,jpanel,margin,Java,Arrays,Swing,Jpanel,Margin,我正在做一个计算机科学项目,但我还没有找到任何解决问题的方法。我正在通过GridLayout创建一个包含图像的JPanel二维数组。我想删除所有面板之间的填充/边距,这样它就可以毫无顾忌地流到单个图像中。然而,setHGap和setVGap方法似乎对我没有帮助。如果有任何回应,我将不胜感激。多谢各位 import java.awt.GridLayout; import java.util.Map; import javax.swing.ImageIcon; import javax.swing.

我正在做一个计算机科学项目,但我还没有找到任何解决问题的方法。我正在通过
GridLayout
创建一个包含图像的
JPanel
二维数组。我想删除所有面板之间的填充/边距,这样它就可以毫无顾忌地流到单个图像中。然而,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();
            }
        });
    }
}
导入java.awt.GridLayout;
导入java.util.Map;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类映射数组{
静态JPanel[][]tiles=新JPanel[11][11];
公共映射数组(){
}
受保护的静态图像图标createImageIcon(字符串路径){
java.net.URL imgURL=Map.class.getResource(路径);
如果(imgURL!=null){
返回新的图像图标(imgURL);
}否则{
System.err.println(“找不到文件:+path”);
返回null;
}
}
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame();
框架设置尺寸(325300);
GridLayout=新的GridLayout(10,10);
frame.setLayout(布局);
对于(int i=0;i<10;i++){
对于(int j=0;j<10;j++){
tiles[i][j]=新的JPanel();
tiles[i][j]。添加(新JLabel)(
createImageIcon(“tile-1.png”);
框架。添加(瓷砖[i][j]);
}
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.validate();
frame.repaint();
}
});
}
}
一些注意事项:

  • 为每个面板提供一个
    网格布局

  • 使用数组长度作为循环限制

  • 尽可能重新计算常数

代码:

导入java.awt.GridLayout;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类映射数组{
私有静态最终整数大小=4;
私有静态最终JPanel[][]tiles=新JPanel[SIZE][SIZE];
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame();
frame.setLayout(新的GridLayout(大小、大小));
对于(int i=0;i
记住,您的每个面板都有填充物,请使用
pack()
,而不是
setSize()
。我该如何更改填充物?另外,pack()没有更改任何内容。
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);
            }
        });
    }
}