Java GridBagLayout顶部和底部调整间隙
我有以下代码:Java GridBagLayout顶部和底部调整间隙,java,swing,gridbaglayout,spacing,Java,Swing,Gridbaglayout,Spacing,我有以下代码: public Frame() { super(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.grid
public Frame() {
super();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.weightx = 1;
c.weighty = 1;
for (int i = 0; i < 10; i++) {
c.gridy = i;
panel = new JPanel();
panel.setBorder(BorderFactory.createLineBorder(Color.RED, 1));
add(panel, c);
}
}
公共帧(){
超级();
setVisible(真);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(新的GridBagLayout());
GridBagConstraints c=新的GridBagConstraints();
c、 fill=GridBagConstraints.BOTH;
c、 gridx=0;
c、 权重x=1;
c、 权重=1;
对于(int i=0;i<10;i++){
c、 gridy=i;
panel=新的JPanel();
panel.setOrder(BorderFactory.createLineBorder(Color.RED,1));
添加(面板,c);
}
}
导致以下帧:由于调整了大小(预期),您可以看到顶部和底部元素(用箭头标记)的上方和下方都有一些空间 你知道如何消除这两个空白,或者至少是最上面的空白吗?
谢谢
ps:我知道这个问题和我之前的一个问题很相似,但是它不一样 问题在于如何通过属性管理额外的垂直空间(参见API)。我只想引用这句话: 如果所有权重均为零,则所有额外空间将显示在 单元格的网格和顶部和底部边缘 当所有权重都为1(您的案例)时,也会发生同样的情况。事实上,除非由于布局管理器计算可用空间的方式,第一行或最后一行(或两行)被显式设置为填充整个额外空间,否则将发生这种情况。假定由于可用空间和行数之间的剩余分割,始终存在未分配的额外空间,并且该空间分布在顶部(和/或)底部边缘 如果用下一行替换循环,则整个额外空间将分布在顶部和底部行中,没有任何间隙(但中间行不会占用任何额外空间):
//c.weighty=1;评论这行
对于(int i=0;i<10;i++){
c、 gridy=i;
c、 权重=(i==0 | | i==9)?1:0;//在此处添加此行
panel=新的JPanel();
panel.setOrder(BorderFactory.createLineBorder(Color.RED,1));
frame.getContentPane().add(panel,c);
}
你可以玩这条添加的线,你会明白我的意思
注意:如果您想要一个分布良好的网格,那么可能是一个更好的选择
离题
- 将组件添加到已显示的容器时,需要调用方法
- 在使顶级容器可见之前,应该始终调用方法
- 问题在于如何通过属性管理额外的垂直空间(请参见API)。我只想引用这句话:
如果所有权重均为零,则所有额外空间将显示在
单元格的网格和顶部和底部边缘
当所有权重都为1(您的案例)时,也会发生同样的情况。事实上,除非由于布局管理器计算可用空间的方式,第一行或最后一行(或两行)被显式设置为填充整个额外空间,否则将发生这种情况。假定由于可用空间和行数之间的剩余分割,始终存在未分配的额外空间,并且该空间分布在顶部(和/或)底部边缘
如果用下一行替换循环,则整个额外空间将分布在顶部和底部行中,没有任何间隙(但中间行不会占用任何额外空间):
//c.weighty=1;评论这行
对于(int i=0;i<10;i++){
c、 gridy=i;
c、 权重=(i==0 | | i==9)?1:0;//在此处添加此行
panel=新的JPanel();
panel.setOrder(BorderFactory.createLineBorder(Color.RED,1));
frame.getContentPane().add(panel,c);
}
你可以玩这条添加的线,你会明白我的意思
注意:如果您想要一个分布良好的网格,那么可能是一个更好的选择
离题
- 将组件添加到已显示的容器时,需要调用方法
- 在使顶级容器可见之前,应该始终调用方法
//c.weighty = 1; comment this line
for (int i = 0; i < 10; i++) {
c.gridy = i;
c.weighty = (i == 0 || i == 9) ? 1 : 0; // add this line here
panel = new JPanel();
panel.setBorder(BorderFactory.createLineBorder(Color.RED, 1));
frame.getContentPane().add(panel, c);
}