为什么网格不遵守约束?

问题描述 投票:0回答:1

我对GridBagLayout不了解。这是截图以解释

enter image description here

对于JTextField "Janvier", gridy = 0, gridx = 1 and **gridwidth = 5**

对于JTextField "Février", gridy = 0, gridx = 5 and gridwidth = 4

对于星期数1, 2, 3 and 4 : gridy = 1, gridx = 0, 1, 2 and 3, and gridwidth = 1

对于星期数5 : gridy = 1, gridx = 4 and gridwidth = 2.

事实上,我想在“ Janvier”和“Février” JTextField下都有第5周。

您对此有何看法?我忘记了什么吗?

谢谢。

java swing layout-manager gridbaglayout
1个回答
0
投票

对于第5周:网格= 1,网格x = 4,网格宽度= 2。

在您的示例中,第二行仅包含7个组件。每个组件都占据一列。

默认情况下,如果未将任何组件添加到该列,则该列的默认大小为0,因此您不能仅说一个组件占用两个单元格,因为GridBagLayout不知道第二列的内容是。

如果您希望第5周占用两列,那么您确实需要创建一个包含8列的网格。

这可以通过添加如下代码来完成:

GridBagLayout gbl = new GridBagLayout();
yourPanel.setLayout( gbl );

//  Set up a grid with 8 columns.
//  The minimum width of a column is 50 pixels

int[] columns = new int[8];
Arrays.fill(columns, 50);
gbl.columnWidths = columns;

现在,GridBagLayout可以理解对于没有真正组成部分的任何列,列宽应该是什么。

因此,第5周的按钮应同时位于Janvier和Fevrier之下。

请参见:Creating a board game layout using JLayeredPane,了解使用此基本方法的完整工作示例。

© www.soinside.com 2019 - 2024. All rights reserved.