GridLayout 移除 JPanel 之间的填充
Posted
技术标签:
【中文标题】GridLayout 移除 JPanel 之间的填充【英文标题】:GridLayout Removing Padding between JPanels 【发布时间】:2012-04-17 17:13:39 【问题描述】:我正在从事一个计算机科学项目,但我找不到任何解决我的问题的方法。我正在创建一个JPanel
s 的二维数组,其中包含通过GridLayout
的图像。我想删除所有面板之间的填充/边距,以便它无缝地流入单个图像。但是, 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();
);
【问题讨论】:
记住你的每个面板也有填充 使用pack()
,而不是setSize()
。
我将如何更改填充?
另外 pack() 没有改变任何东西。
【参考方案1】:
几点说明:
给每个面板一个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);
);
【讨论】:
以上是关于GridLayout 移除 JPanel 之间的填充的主要内容,如果未能解决你的问题,请参考以下文章
Java Swing - JPanel 和 GridLayout 边距/填充
GridLayout在JFrame / JPanel中一起消失
如何在 JPanel 和 JFrame 的 contentPane 之间添加间距?
java中将Label添加到GridLayout类型的JPanel里,label太靠左怎么往右调整到居中?如图
java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小(示