首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridBagLayout: Swing

GridBagLayout: Swing
EN

Stack Overflow用户
提问于 2017-09-08 02:34:54
回答 1查看 46关注 0票数 1

我对Swing中的GridBaGLayout有一个非常基本的疑问。我首先尝试将给定的帧划分为三个部分,权重为( 0.2,0.2和0.6)。下面的代码运行良好,因为我看到三个部分具有各自的权重。

代码语言:javascript
复制
        JFrame frame = new JFrame();
        frame.setLayout(new GridBagLayout());
        JPanel p1= new JPanel(), p2 = new JPanel(), p3 = new JPanel();


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.BOTH;

    c.weightx = 1;
    c.weighty = 0.2;
    c.gridx = 0;
    c.gridy = 0;
    frame.add(p1,c);
    p1.setBackground(Color.lightGray);

    c.gridy = 1;
    frame.add(p2,c);
    p2.setBackground(Color.gray);

    c.weighty = 0.6;
    c.gridy = 2;
    frame.add(p3,c);
    p3.setBackground(Color.blue);

接下来,我尝试在面板p1中添加一个JLabel。像这样:p1.add(new JLabel("Hi"))。如果我观察在添加之前和之后打开的帧,我会看到在两种情况下分配的权重的差异。首先(不添加JLabel时),分配0.2、0.2和0.6。其次,当添加JLabel时,第一个面板增加一个比特,第二个面板减少一个比特。你也可以在下面的图片中看到:

这是什么原因呢?因为我认为这与布局有关,根据父框架或面板中的可用空间分配权重。但是不能很好地理解其中的原因。

权重x/y划分基于可用空间。那么panel p1和p2是如何获得几乎相同的高度呢?假设框架的高度是h。当添加p1时,可用的高度是h,然后p1得到0.2*h,剩下的可用高度是0.8h。现在,当必须添加p2时,将给予0.8h的0.2,即0.16h。那么p1和p2 (浅灰色和深灰色背景色)是如何看起来高度相同的呢?

另外,我如何实现恒定划分,并保持面板的权重与分配的相同?

EN

回答 1

Stack Overflow用户

发布于 2017-09-08 02:39:39

我首先尝试将给定的帧划分为三个部分,其中权重为(

,0.2和0.6)。

"weightx/y“约束是针对”额外“空间的。

每个组件都按其首选大小分配空间。然后,如果帧大小增加,将以指定的比率为每个组件提供额外的空间。因此,除非每个组件的首选大小也在指定的比率中,否则组件将不会具有总体所需的比率。

空JPanel的高度为10 (基于FlowLayout的默认大小计算)。因此,所有3个面板的首选高度都是30。

如果你有一个大小为130的内容窗格,那么你就有100个像素的额外空间,所以面板的大小变成:

代码语言:javascript
复制
p1 = 10 + (100 * .2) = 30
p2 = 10 + (100 * .2) = 30
p3 = 10 + (100 * .6) = 70

当您将标签添加到p1时,首选高度将变为10加上标签的高度,假设(10 + 15) = 25。因此,现在3个面板的首选高度是(25 + 10 + 10) = 45。所以只有85个像素要按您指定的比例进行分割。

我怎样才能实现恒定的除法,并保持面板的权重与分配的相同?

你可以查看Relative Layout。它旨在允许您指定每个组件的相对大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46103008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档