Java BoxLayout内部J通道对齐-如何将其设置为左侧?

Java BoxLayout内部J通道对齐-如何将其设置为左侧?,java,swing,layout,alignment,gridbaglayout,Java,Swing,Layout,Alignment,Gridbaglayout,我一直在和BoxLayout做斗争。我有一个JPanel包含3个内部面板。外部面板设置为带垂直轴的BoxLayout,第一个和第二个内部面板设置为GridBagLayout,最后一个设置为flowLayout(左) 结果是第一个和第二个内部容器与中心对齐(我猜这是由于GBL的默认行为没有设置weightx造成的)。如何将它们对齐到左侧 我是否正确理解锚点将在单元内工作,但不会对齐整个网格?权重x会在细胞间分配空间,但不会将整个容器向左移动?如果这是真的,我应该使用另一个组件作为包装器,还是有其他

我一直在和BoxLayout做斗争。我有一个JPanel包含3个内部面板。外部面板设置为带垂直轴的BoxLayout,第一个和第二个内部面板设置为GridBagLayout,最后一个设置为flowLayout(左)

结果是第一个和第二个内部容器与中心对齐(我猜这是由于GBL的默认行为没有设置weightx造成的)。如何将它们对齐到左侧

我是否正确理解锚点将在单元内工作,但不会对齐整个网格?权重x会在细胞间分配空间,但不会将整个容器向左移动?如果这是真的,我应该使用另一个组件作为包装器,还是有其他方法

panAdv1 = new JPanel();
add(panAdv1);
panAdv1.setLayout(new BoxLayout(panAdv1, BoxLayout.PAGE_AXIS));

// PANEL 1 //
panel1 = new JPanel();
panAdv1.add(panel1);
panel1.setLayout(new GridBagLayout());


阅读上的Swing教程中的部分。BoxLayout尊重组件的“对齐”特性

如何将它们对齐到左侧


JPanel的默认设置是将面板中心对齐,因此您需要将对齐方式更改为左对齐。

“我猜这是由于GBL的默认行为而没有设置权重X”有趣的假设。你有没有尝试过用非零的
weightx
约束来检验这个假设?你是对的,我应该在问这个问题之前做这个。为我辩护,我花了几个小时试图让布局工作,但我读了很多关于weightx的文章,但都没有用。今天早上我测试了它,它似乎达到了我的预期效果——分配空闲空间,但不允许我将容器的对齐设置为左侧。是吗?哈,进步!我为最右边的位置创建了一个空标签,并将其设置为weightx=1.00,这会导致其余组件向左对齐。我花了一段时间才弄明白。非常感谢。(1-)@Faire,
我创建了一个空标签…
-这是一个黑客行为,没有必要。正确使用布局管理器。我告诉过你如何正确使用BoxLayout管理器来强制面板向左对齐。现在,如果你这样做,并将内部面板的布局设置为左对齐的FlowLayout,那么你就不会有问题了。哦,我明白了。我做错的是试图改变未对齐标签的对齐方式——这当然不起作用。解决办法是改变锚定设置-为什么它不起作用,首先我不知道,我一定是用错了。因此,解决方案是将两个网格框合并为一个(这有助于对齐它们的单元格),然后在需要的地方将锚点设置到左侧。面板对齐没有取得多大效果。我想我没能足够准确地问这个问题,因为这个问题没有很好的定义,没有图片的帮助也很难描述。这不起作用——唯一的变化是我相信在网格单元内部,它没有改变单元自身对齐的位置和方式。
// PANEL 2 //

panel2 = new JPanel();
panAdv1.add(panel2);
panel2.setLayout(new GridBagLayout());
//PANEL 5 - buttons //
panel5 = new JPanel();
panAdv1.add(panel5);
panel5.setLayout(new FlowLayout(FlowLayout.LEFT));