gpt4 book ai didi

java - 一个组件在 GridBagLayout 中仅占据一列

转载 作者:行者123 更新时间:2023-12-01 13:39:50 25 4
gpt4 key购买 nike

我正在尝试制作一个非常简单的布局,这在其他布局管理器中会非常容易。但是,我需要让它适用于 GridBagLayout。一段代码之后:

GridBagConstraints c = new GridBagConstraints();

JPanel smallLogoPanel = new JPanel();
smallLogoPanel.setBorder(new LineBorder(Color.red, 1));//for visualizing components' display are
smallLogoPanel.setSize(50, 50);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 2;
c.weightx = 0.01;
c.weighty = 0.1;
c.fill = GridBagConstraints.BOTH;

JLabel smallLogoLabel = new JLabel(some code to get ImageIcon);
smallLogoPanel.add(smallLogoLabel);
this.infoPanel.add(smallLogoPanel, c);

JLabel label1 = new JLabel("Label 1");
label1.setFont(new Font("Verdana", Font.BOLD, 30));
label1.setBorder(new LineBorder(Color.red, 1));
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 9;
c.gridheight = 1;
c.weightx = 0.99;//for some reason smallLogoLabel takes much more space if this weightx is any smaller
c.weighty = 0.075;
this.infoPanel.add(label1, c);

JLabel label2 = new JLabel("Label 2");
label2.setFont(new Font("Verdana", Font.BOLD, 10));
label2.setBorder(new LineBorder(Color.red, 1));
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 9;
c.gridheight = 1;
c.weightx = 0.99;
c.weighty = 0.025;
this.infoPanel.add(label2, c);

...我得到这样的结果:

result 1

...这绝对没问题。问题是当我在其下面添加两个标签时:

JLabel label3 = new JLabel("Label 3");
label3.setFont(new Font("Verdana", Font.BOLD, 20));
label3.setBorder(new LineBorder(Color.red, 1));
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 5;
c.gridheight = 1;
c.weightx = 0.5;
c.weighty = 0.05;
c.anchor = GridBagConstraints.CENTER;
this.infoPanel.add(label3, c);

JLabel label4 = new JLabel("Label 4");
label4.setFont(new Font("Verdana", Font.BOLD, 20));
label4.setBorder(new LineBorder(Color.red, 1));
c.gridx = 5;
c.gridy = 2;
c.gridwidth = 5;
c.gridheight = 1;
c.weightx = 0.5;
c.weighty = 0.05;
c.insets.left = 0;
this.infoPanel.add(label4, c);

...结果如下:

enter image description here

顶行的宽度变得不同,特别是带有图标的面板变得更宽。另一个问题 - 底行。我希望两个标签的宽度相等。然而,左边的似乎只占一列,与带有图标的面板宽度相同。

我真的很高兴有人能帮助我解决这个问题,因为我现在完全陷入困境。

最佳答案

GridBagLayout 单列中的所有组件都具有完全相同的 weightx:属于该列中任何组件的任何 GridBagConstraints 的最大weightx。

最初,第 0 列的权重 x 为 0.01。但随后您在不同行的第 0 列中添加了其他内容,weightx 为 0.5,因此现在第 0 列中的所有组件都被 GridBagLayout 视为其weightx 为 0.5。 p>

相同的规则适用于行和权重值。

顺便说一句,一个常见的误解是,gridwidth = 9 可以使单元格比其约束仅为 gridwidth = 1 时宽九倍。实际情况并非如此。网格宽度 9 不会更宽,除非另一行实际上在这些列中包含非空单元格。这是因为 GridBagLayout 单元格大小是灵活的,并且它们的宽度为零,除非它们包含组件。只有权重决定细胞的相对大小。 gridwidth 和 gridheight 没有。

关于java - 一个组件在 GridBagLayout 中仅占据一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com