我正在尝试使用GridBagLayout,但我遇到了一些问题。我想使用12行进行布局。所以首先我让两个JPanel填充前两行(gridheight = 1)。然后我制作了5个其他的JPanel来填充其他10行(gridheight = 2)。底部5个JPanels得到gridheight = {2,4,6,8,10},所以它们不会重叠或任何东西。
我现在遇到的问题是:
所有JPanel都有相同的尺寸!
我也填写了两种方式而不使用任何锚点。如果我添加一个格式为1的JPanel,gridy = 0和gridheight = 2,那么它的高度将加倍,那么这里的交易是什么?我是否必须事先告诉布局系统我要使用的总行数?如果是这样,我该怎么做?
答案 0 :(得分:2)
GridBagLayout(GBL)有几个方面被初次使用者遗漏。
1)放置在GBL内的组件将以其“首选”大小初始化。 JPanel,iirc,首选大小为1x1。
2)如果您希望GBL单元格根据封闭容器调整大小,则需要为它们赋予权重和权重。这两个属性的作用是说,根据所分配的所有权重x和权重的比率,给单元格一个可用区域的百分比。例如如果我有2个单元格,1个权重x = 1.0,第二个单元格为2.0,那么第一个单元格将是第二个单元格的1/2(或者第二个单元格将是宽度的两倍)。
3)GBL在您第一次潜入时会进行大量的试验和错误,但它是最强大,最灵活,最可靠的布局(特别是与嵌套布局相比,布莱克)
答案 1 :(得分:0)
所以前两行我说:
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
c.gridheight = 1;
c.ipadx = 100;
c.ipady = h / (2 * columns + 2);
c.weightx = 1.0;
c.weighty = 1.0;
对于下一行我只改变c.ipady:
c.ipady = h / (columns + 1);
所以这基本上解决了我的问题,但我仍然觉得它可以轻松得多。
P.S。变量h是我屏幕的高度。