繁体   English   中英

gridheight似乎不起作用

[英]gridheight doesn't seem to work

我正在尝试使用GridBagLayout,但是我遇到了一些麻烦。 我想使用12行进行布局。 因此,首先,我使两个JPanels填充了前两行(gridheight = 1)。 然后,我制作另外5个JPanels来填充其他10行(gridheight = 2)。 底部的5个JPanel获得gridheight = {2,4,6,8,10},因此它们不会重叠或其他任何东西。 我现在遇到的问题是:
所有的JPanel都具有相同的大小!

我还填写了两种方式,并且不使用任何锚点。 如果我添加一个带有gridx = 1,gridy = 0和gridheight = 2的JPanel,那么它将具有两倍的高度,那么这有什么用呢? 我是否必须事先告知布局系统我将要使用的总行数? 如果是这样,我该怎么做?

GridBagLayout(GBL)在很多方面都被初次使用的用户所忽略。

1)放置在GBL内的组件将以其“首选”大小进行初始化。 iirc的JPanel的首选大小为1x1。

2)如果要根据封闭容器调整GBL单元的大小,则需要给它们一个weightx和weighty。 这两个属性的作用是,根据分配的所有权重和权重之比,为单元提供可用面积的百分比。 例如,如果我有2个像元,而1个像元的权重= 1.0,第二个像元的权重是2.0,那么第一个像元的宽度将是第二个像元的1/2(或者第二个像元的宽度是第二个像元的两倍)。

3)首次潜水时,GBL会经历很多试验和错误,但它是最强大,最灵活和最可靠的布局(尤其是与嵌套布局相比,更容易出错)

因此,对于前两行,我说:

 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);

因此,这基本上解决了我的问题,但我仍然认为这可能容易得多。

PS变量h是我屏幕的最高点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM