我是新手,我想弄清楚它是如何工作的。告诉我我是否错。

我主要想出了放置组件所必需的gridx和gridy。您至少需要n个(gridx,gridy)值才能创建nxn网格。例如(5,5),(3,3),(4,9),(3,10)将使用上面分别放置的组件(gridx,gridy)创建一个3x4网格空间(4行,3列)在单元格(3,2),(1,2),(2,3),(1,4)中。

weightx和weighty似乎有2个函数,weightx的> 0值和weighty将网格单元拉伸到边缘(否则将其居中),我们也可以设置分量的比例-因此,如果一个分量的gridx = 0.1且anothr为0.2,则后一个宽度可能是宽度的两倍。但是,在按比例分配组件时,要考虑组件的最小默认宽度和高度。

需要填充才能将组件拉伸到单元格的边缘。没有填充,组件将保留在中心。

但是在这种情况下,我们可以使用锚点将组件沿单元格的西北角而非中心定位。

插图在单元的边缘内部创建了空间墙。

ipadx和ipady推动包含单元格的列或行的边界。

但是我不能很好地弄清楚gridwidth和gridheight是如何工作的。

考虑下面的示例。在此处将4个按钮放置在单元格b1(3,2),b2(1,1),b3(2,3),b4(4,4)中
4x4网格空间。

如何使按钮(例如b2或b4)占据它所占据的单元格的整个行或列?

import javax.swing.*;
import java.awt.*;
//import java.awt.event.*;
public class Swing29a
{
public static void main(String[] args)
{
JFrame f1= new JFrame("GridBag Layout Test");

f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setResizable(true);
f1.setLocation(200,100);
f1.setSize(800,800);

JPanel p1 = new JPanel();
p1.setBackground(Color.black);
f1.add(p1);


JButton b1= new JButton("Button 1");
b1.setBackground(Color.white);

JButton b2= new JButton("Button 2");
b2.setBackground(Color.white);

JButton b3= new JButton("Button 3");
b3.setBackground(Color.white);

JButton b4= new JButton("Button 4");
b4.setBackground(Color.white);



GridBagLayout gm1= new GridBagLayout();
p1.setLayout(gm1);
GridBagConstraints cns =new GridBagConstraints();

cns.gridx=5;
cns.gridy=5;
cns.weightx=0.1;
cns.weighty=0.1;
cns.fill=GridBagConstraints.BOTH;

p1.add(b1,cns);

cns.gridx=3;
cns.gridy=3;
p1.add(b2,cns);


cns.gridx=4;
cns.gridy=9;
p1.add(b3,cns);

cns.gridx=7;//3;
cns.gridy=10;
cns.gridheight=3;
cns.weightx=0.2;
cns.weighty=0.2;
//cns.weightx=10.0;
//cns.weighty=9.0;
//cns.ipadx=50;
//cns.ipady=50;
p1.add(b4,cns);

f1.setVisible(true);

}
}


编辑:
这是图像链接
http://postimg.org/image/wae2x4w4z/

我希望任何按钮都能够填充整行或整列,或者连续容纳至少2个单元格。

最佳答案

网格宽度,网格高度:

cells指定列数(对于gridwidth)或行数(对于gridheight),组件的显示区域可以被添加了这些约束的组件占用。默认值为1

因此,如果对于(R x C)的网格;连续有C个单元格。如果要使某个组件占据该特定行的所有单元格,只需将GridBigConstraint.gridWidth设置为C

使用GridBagConstraints.REMAINDER指定组件是其行(对于gridwidth)或列(对于gridheight)中的最后一个组件。

本教程中已经有一个不错的书面示例:How to use GridBagLayout

09-15 14:42