我将第一个GridBagLayout
设置为主JPanel
。在此面板中,添加了其他十个面板(outerConstraints)。子面板包含大量文本,应使用新布局和innerConstraints
放置在WEST中。但他们居中。
稍微测试一下后,我发现文本/图像被放置在WEST,但只有outerConstraints
没有水平填充白色面板。问题是,我无法删除此命令,因为我需要每个面板具有相同的宽度。
是否有可能允许outerConstraints
填充AND以使其嵌套GridBagLayout
定位文本?
setLayout(new GridBagLayout());
GridBagConstraints outerConstraints = new GridBagConstraints();
outerConstraints.insets = new Insets(5, 5, 5, 5);
outerConstraints.fill = GridBagConstraints.HORIZONTAL; // seems to be reason, but needed.
for (int i = 0; i < 10; i++) {
outerConstraints.gridx = i % 2;
outerConstraints.gridy = i / 2;
JPanel agentVisitCard = new JPanel();
add(agentVisitCard, outerConstraints);
GridBagConstraints innerConstraints = new GridBagConstraints();
innerConstraints.anchor = GridBagConstraints.WEST; //fails
innerConstraints.insets = new Insets(5, 5, 5, 5);
GridBagLayout layout = new GridBagLayout();
agentVisitCard.setLayout(layout);
(...)
JLabel label = new JLabel("Agent " + (i + 1) + ":");
innerConstraints.gridx = 0;
innerConstraints.gridy = 0;
agentVisitCard.add(label, innerConstraints);
答案 0 :(得分:2)
锚不工作的原因是因为组件没有重量。如果没有这个,给予组件的区域只是所需的最小尺寸,即组件本身的大小,而不是更大。
以下是来自swing tutorials(在 weightx,重要部分下)的引用解释它:
除非您为weightx或weighty指定至少一个非零值,否则所有组件在其容器的中心聚集在一起。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空格。
默认情况下,weightx和weighty为0,这就是为什么它不适合你。由于您只想水平锚定它,因此将weightx设置为非零值可以使其工作。如果你想要一个垂直锚,你也需要设置重量。
关于如何使用weightx和weighty值的解释如下:
通常,权重指定为0.0和1.0作为极值:必要时使用两者之间的数字。较大的数字表示组件的行或列应该有更多的空间。
尽管他们建议使用介于0.0和1.0之间的值,但这不是必需的。任何double
值都可以。重要的是组件重量之间的比例,如果你有几个组件的重量。