Java 多重网格约束?
我有点困惑,是否可能有多个Java 多重网格约束?,java,gridbaglayout,Java,Gridbaglayout,我有点困惑,是否可能有多个GridBagConstraints 我有两个使用GridBagLayout的面板,它们都受相同的约束影响。这给了我一个问题,当涉及到将较小的组件放在较大的组件旁边时,如下图所示。左侧面板的大小意味着该行的单元格非常大,位于右侧面板及其组件的中心。我曾尝试对每个面板使用单独的约束,但我没有看到任何差异,我认为我做错了什么 如何实现相邻放置的两个面板,但每个面板的组件是否受单独约束的影响 以下是我目前拥有的: 创建时使用: // layout GridB
GridBagConstraints
我有两个使用GridBagLayout的面板,它们都受相同的约束影响。这给了我一个问题,当涉及到将较小的组件放在较大的组件旁边时,如下图所示。左侧面板的大小意味着该行的单元格非常大,位于右侧面板及其组件的中心。我曾尝试对每个面板使用单独的约束,但我没有看到任何差异,我认为我做错了什么
如何实现相邻放置的两个面板,但每个面板的组件是否受单独约束的影响
以下是我目前拥有的:
创建时使用:
// layout
GridBagConstraints c = new GridBagConstraints();
// components
JPanel supplier = new JPanel(new GridBagLayout());
// grab the suppliers
Suppliers.Supplier[] suppliers = new Suppliers.Supplier[Suppliers.supplier.size()];
for (int i = 0; i < Suppliers.supplier.size(); i++) {
suppliers[i] = Suppliers.supplier.get(i);
}
JPanel resultsPanel = new JPanel();
JScrollPane scrollpane = new JScrollPane(resultsPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollpane.setPreferredSize(new Dimension(120, 300));
// style properties
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10, 10, 10, 10);
supplier.add(scrollpane, c);
int position = 0;
for (int i = 0; i < Suppliers.supplier.size(); i++) {
b_supplierSuppliers.add(new JButton(suppliers[i].getName()));
b_supplierSuppliers.get(i).setActionCommand(suppliers[i].getId());
b_supplierSuppliers.get(i).addActionListener(this);
// style properties
c.gridx = 0;
c.gridy = position;
c.insets = new Insets(10, 10, 10, 10);
c.gridwidth = 1;
resultsPanel.add(b_supplierSuppliers.get(i), c);
position++;
}
JPanel resultsPaneltwo = new JPanel(new GridBagLayout());
// style properties
c.gridx = 1;
c.gridy = 0;
supplier.add(resultsPaneltwo, c);
// code label
l_supplierCode = new JLabel("Supplier Code");
// style properties
c.gridx = 1;
c.gridy = 0;
c.insets = new Insets(0, 10, 10, 10);
c.gridwidth = 4;
c.fill = 4;
resultsPaneltwo.add(l_supplierCode, c);
//布局
GridBagConstraints c=新的GridBagConstraints();
//组成部分
JPanel供应商=新的JPanel(新的GridBagLayout());
//抓住供应商
供应商.Supplier[]供应商=新供应商.Supplier[供应商.Supplier.size()];
对于(int i=0;i
然而,我追求的是:
非常感谢您的帮助。首先,回答您最初的问题。是的,您应该为每个组件使用不同的
GridBagConstraints
对象。但是,值得注意的是,为每个组件创建新的约束并不是必不可少的,在将约束指定给其他组件后对约束的更改不会影响早期组件的位置。因此,为了可读性和以后的调试,声明多个约束是值得的,但不是必需的
此外,看起来您需要为右侧单元格上的约束指定一个权重
。默认情况下,单元格在任何空闲空间中居中。为了指定额外空间的放置位置(垂直表示y,水平表示x),需要为约束指定一个权重值
c.weighty = 1;
这将使所有额外的垂直空间分配给该单元的约束,并因此将单元推到顶部。如果创建第二个约束并执行以下操作
c2.weighty = 1;
额外的空间将均匀分布在这两个单元格的约束之间。我希望这会有所帮助。让我知道你进展如何
这位官员表示,以下是关于体重属性的信息:
weightx,weighty
指定权重是一门艺术,它可以具有
对GridBagLayout组件外观的重大影响
控制。权重用于确定如何将空间分布在
列(权重x)和行间(权重y);这对我们来说很重要
指定大小调整行为。除非指定至少一个非零
值为weightx或weighty时,所有组件在
容器的中心。这是因为当权重为0.0时
默认情况下),GridBagLayout在其
单元格和容器的边缘
通常,指定权重的极端值为0.0和1.0:
根据需要使用介于两者之间的数字。较大的数字表明
组件的行或列应获得更多空间。对于每一列,
重量与为组件指定的最高重量X有关
在该列中,每个多列组件的重量为
以某种方式在组件所在的列之间拆分。同样,每个
行的权重与为行指定的最高权重相关
该行中的组件。额外的空间倾向于朝向目标
最右边的列和最下面的行
请把面板的图片放进去。它的外观。第二张图片正是你想要的@ShihabSoft。请务必阅读整个问题。如果这个问题已经解决,不要忘记接受并投票表决一个答案。如果目前没有一个答案可以胜任,你可以发布自己的答案并接受。这有助于将来可能偶然发现您的问题的任何人。:)另外,顺便说一句,我已经有一段时间没有使用
GridBagLayout
。如果有人发现这个答案有任何必要的修改,请告诉我,以便我可以更正。谢谢您快速而详细的回复。您的建议以及面板上的achor=GridBagConstraints.NORTH修复了该问题。非常感谢。