为什么网格不遵守约束?
Why grid doesn't respect the constraint?
我不明白 GridBagLayout
。这是解释的截图
对于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 周。
你怎么看这件事?我是不是忘记了什么?
谢谢。
编辑:抱歉,我的解释有误。第一个 JTextField "Janvier" 有 gridx = 0.
这是一张带有代码的新截图:
enter image description here
JPanel pan = new MyGridBagPan();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridheight = 1;
c.gridwidth = 5;
c.gridx = 0;
c.gridy = 0;
JTextField field = new MyLeftField("Janvier", "", 5, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 1;
c.gridx = 0;
c.gridy++;
field = new MyLeftField("1", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("2", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("3", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("4", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridy = 0;
c.gridx = 5;
c.gridwidth = 5;
field = new MyLeftField("Février", "", 0, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 2;
c.gridx = 4;
c.gridy = 1;
field = new MyLeftField("5", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 1;
c.gridx+=2;
field = new MyLeftField("6", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("7", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("8", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("9", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
JOptionPane.showOptionDialog(null, pan
, "test", JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, null, null);
For the week number 5 : gridy = 1, gridx = 4 and gridwidth = 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 下方。
有关使用此基本方法的完整工作示例,请参阅:。
我不明白 GridBagLayout
。这是解释的截图
对于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 周。
你怎么看这件事?我是不是忘记了什么?
谢谢。
编辑:抱歉,我的解释有误。第一个 JTextField "Janvier" 有 gridx = 0.
这是一张带有代码的新截图: enter image description here
JPanel pan = new MyGridBagPan();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridheight = 1;
c.gridwidth = 5;
c.gridx = 0;
c.gridy = 0;
JTextField field = new MyLeftField("Janvier", "", 5, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 1;
c.gridx = 0;
c.gridy++;
field = new MyLeftField("1", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("2", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("3", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("4", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridy = 0;
c.gridx = 5;
c.gridwidth = 5;
field = new MyLeftField("Février", "", 0, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 2;
c.gridx = 4;
c.gridy = 1;
field = new MyLeftField("5", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridwidth = 1;
c.gridx+=2;
field = new MyLeftField("6", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("7", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("8", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
c.gridx++;
field = new MyLeftField("9", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
pan.add(field, c);
JOptionPane.showOptionDialog(null, pan
, "test", JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, null, null);
For the week number 5 : gridy = 1, gridx = 4 and gridwidth = 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 下方。
有关使用此基本方法的完整工作示例,请参阅: