JPanel grid = new JPanel();
GridLayout layout = new GridLayout (6,7,0,0);
grid.setLayout (layout);
slot = new ImageIcon ("");
for (int x = 0; x < 42; ++x)
{
slotbtn = new JButton(slot);
slotbtn.setContentAreaFilled (false);
//slotbtn.setBorderPainted (false);
slotbtn.setBorder (BorderFactory.createEmptyBorder (0,0,0,0));
slotbtn.setFocusPainted (false);
grid.add(slotbtn);
}
这是我得到的输出:
我正在创建一个6x7网格。我需要的输出是行和列之间没有空格,所有内容都应该压缩在一起。我尝试打包,它没有用。我究竟做错了什么?
- 我尝试了FlowLayout,但我不得不调整框架大小,框架上还有其他按钮,所以我不认为我更喜欢调整大小以使按钮适合他们适当的位置。 - 我将这个JPanel放在另一个jpanel(使用borderlayout并包含另外两个面板)中,然后我把它放在中心,另外两个面板是南北方。
答案 0 :(得分:2)
此问题是因为您将grid
(网格的整个大小)划分为7*6
所以如果您重新调整窗口大小,您会看到此间隙已更改,因此如果您不想删除此gab
答案 1 :(得分:2)
JButton
使用margin
属性为按钮的内容区域提供额外的填充,您可以尝试使用...
slotbtn.setMargin(new Insets(0, 0, 0, 0));
我还会尝试使用类似slotbtn.setBorder(new LineBorder(Color.RED));
的内容来确定间距是来自按钮,图标还是布局
GridLayout
还将根据容器的可用空间为每个单元格提供相等的空间量,这意味着单元格可能会超出图标的大小。
虽然多做一点工作,GridBagLayout
(如果配置正确)会尊重每个组件的首选大小。
请查看How to use GridBagLayout以获取更多想法。
答案 2 :(得分:1)
使用我使用的任何图像时,我没有使用您的代码。检查你的形象。也许发布一个可复制问题的可运行示例。也许有些事情你没有向我们展示。我首先检查图像的边距。检查一下。如果它仍然有边距,而不是它的图像。此外,不要将大小设置为任何内容!您可能不必要地拉伸面板,将导致间隙。此外,如果您的其他面板比抓握面板大,它也会使其伸展。但请将所有你的set(Xxx)size
取出来,看看会发生什么。只需pack()
import java.awt.GridLayout;
import javax.swing.*;
public class TestButtonGrid {
public TestButtonGrid() {
ImageIcon icon = new ImageIcon(getClass().getResource("/resources/stackoverflow3.png"));
JPanel panel = new JPanel(new GridLayout(6, 7));
for (int i = 0; i < 42; i++) {
JButton slotbtn = new JButton(icon);
slotbtn.setContentAreaFilled(false);
//slotbtn.setBorderPainted (false);
slotbtn.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
slotbtn.setFocusPainted(false);
panel.add(slotbtn);
}
JFrame frame = new JFrame();
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new TestButtonGrid();
}
}