java - 嵌套 GridBagLayout - 如何将子级的列与父级的列对齐

标签 java swing layout-manager gridbaglayout

我有一个 JDialog,其布局为 GridBagLayout。它包含一个 JPanel 子级,该子级还具有 GridBagLayout 作为布局。父级包含其他字段,每个字段分布在两列中(标签 - 编辑器)。子项包含多个字段,每个字段分布在三列中(标签 - 编辑器 - 标签)。我希望子级和父级的第一列对齐在一起。这是现在的样子:

enter image description here

父级相关代码:

GridBagConstraints contrainte = new GridBagConstraints();
Insets insetsLabel = new Insets(0, 0, 0, 0);
Insets insetsChampsEdit = new Insets(0, 10, 0, 0);

contrainte.ipady = 10;
contrainte.gridx = 0;
contrainte.gridy = 1;
contrainte.fill = GridBagConstraints.HORIZONTAL;
contrainte.gridwidth = 1;
this.add(this.m_lblPremierDepart, contrainte);

contrainte.gridx = 1;
contrainte.insets = insetsChampsEdit;
this.add(this.m_timePicker, contrainte);

contrainte.gridx = 0;
contrainte.gridy = 2;
contrainte.insets = insetsLabel; // reset insets
contrainte.gridwidth = 3;
this.add(this.m_panneauDistribution, contrainte);

contrainte.gridy = 3;
contrainte.gridwidth = 1;
this.add(this.m_lblNbMaxVehicules, contrainte);

contrainte.gridx = 1;
contrainte.insets = insetsChampsEdit;
this.add(this.m_spinNbMaxVehicules, contrainte);

child 相关代码:

GridBagConstraints contrainte = new GridBagConstraints();
Insets insetsLabel = new Insets(0, 0, 0, 0);
Insets insetsChampsEdit = new Insets(0, 10, 0, 0);

contrainte.ipady = 10;
contrainte.gridx = 0;
contrainte.gridy = 0;
contrainte.fill = GridBagConstraints.HORIZONTAL;
this.add(this.m_lblPlusPetit, contrainte);

contrainte.gridx = 1;
contrainte.insets = insetsChampsEdit;
this.add(this.m_spinPlusPetit, contrainte);

contrainte.gridx = 2;
this.add(new JLabel("minute(s)"), contrainte);

contrainte.gridx = 0;
contrainte.gridy = 1;
contrainte.insets = insetsLabel; // reset insets
this.add(this.m_lblMoyen, contrainte);

contrainte.gridx = 1;
contrainte.insets = insetsChampsEdit;
this.add(this.m_spinMoyen, contrainte);

contrainte.gridx = 2;
this.add(new JLabel("minute(s)"), contrainte);

contrainte.gridx = 0;
contrainte.gridy = 2;
contrainte.insets = insetsLabel; // reset insets
this.add(this.m_lblPlusGrand, contrainte);

contrainte.gridx = 1;
contrainte.insets = insetsChampsEdit;
this.add(this.m_spinPlusGrand, contrainte);

contrainte.gridx = 2;
this.add(new JLabel("minute(s)"), contrainte);

有没有办法通过 GridBagLayout 获得所需的行为?

最佳答案

The child contains several fields which are disposed in three columns each (label - editor - label).

您还需要将其设为 2 列面板:

  1. 标签为第一列
  2. 面板(包含编辑器和标签)作为第二列)

关于java - 嵌套 GridBagLayout - 如何将子级的列与父级的列对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33859204/

相关文章:

java - Socket.io 不适用于 Android 9(API 级别 28)

java - RuntimeException : com. google.gdata.client.authn.oauth.OAuthException:oauth_token 不存在

java - 单击按钮时如何显示新的 Jframe

java - 如何设置最后一行或除最后一行之外的所有行不知道 MigLayout 中的行数?

java - 调整元素的大小和位置

Java - 奇怪的ConcurrentModificationException

java - 模板引擎建议

java - 如何获取 JTable 中显示的单元格值(不是完整的 TableModel 值)?

java - 有选择地覆盖 Swing 组件?

java - 使用GridLayout时如何在JPanel底部添加ScrollBar?