使用GridLayout时,它将其容器的空间均匀地分布在其行和列元素之间。但是,当计算单元格宽度不会以整数形式出现时,超出的空间将以某种方式放置在容器的边缘和内容之间,容器的内容由GridLayout居中。处理GridLayout中的超出/外层空间
在此照片中可以看到超过空间(着色绿色):
由于框架的尺寸被拖动到233x233 LayoutManager的将提供各成分地板(232/20)= 11个像素的高度和宽度。因此,233%20 = 13个像素超过并置于边缘。
这是代码来生成图像帧:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(20, 0);
layout.setHgap(0);
layout.setVgap(0);
frame.setLayout(layout);
for (int j = 0; j < 20; j++) {
for (int i = 0; i < 20; i++) {
JPanel panel = new JPanel();
panel.setBackground((i + j) % 2 == 0 ? Color.BLACK : Color.WHITE);
frame.add(panel);
}
}
frame.pack();
frame.getContentPane().setBackground(Color.GREEN);
frame.setVisible(true);
所以我想如果有一个简单的方法,使容器“夹”或在某种程度上一致,这超过空间不显示,但相反,容器的大小调整,以适应其内容完美。
AFAIU'GridBagLayout'比GridLayout更能处理更多的空间像素。通过为组件分配权重,我们可以控制哪些列和行将首先获得额外的空间。 –
这是对的,但我想保持GridLayout的优势,即为每个单元格提供相同的大小,但如果使用GridBagLayout和每个单元格中更多不同的面板,情况就不会如此。 – Reizo