【问题标题】:BoxLayout inner JPannels alignment - how can I set them to left?BoxLayout 内部 JPanels 对齐 - 如何将它们设置为左侧?
【发布时间】:2017-11-06 06:54:00
【问题描述】:

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

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

我是否正确理解锚可以在单元格内工作但不能对齐整个网格?那 weightx 会在单元格之间分配空间,但不会将整个容器移动到左侧?如果是这样,我应该使用另一个组件作为包装器,还是有其他方法?

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());

....

// 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));

【问题讨论】:

  • “我猜这是由 GBL 的默认行为引起的,没有设置 weightx” 有趣的假设。您是否尝试过使用非零 weightx 约束来检验该假设?
  • 你是对的,我应该在问问题之前这样做。为了我的辩护,我花了几个小时试图使布局工作,测试锚点,阅读了很多关于 weightx 的信息,但无济于事。我今天早上已经对其进行了测试,它似乎符合我的预期 - 分配可用空间,但不允许我将容器的对齐方式设置为左侧。对吗?
  • 哈,进步了!我为最右边的位置创建了一个空标签并将其设置为 weightx = 1.00,这会导致其余组件向左对齐。我花了一段时间才弄清楚。谢谢!
  • (1-) @Faire, I created an empty label... - 这是一个 hack 和不必要的。正确使用布局管理器。我告诉过你如何正确使用 BoxLayout 管理器来强制面板向左对齐。现在,如果您这样做并将内部面板的布局设置为 FlowLayout 左对齐,那么您将不会有问题。
  • 哦,我明白了。我做错的是试图改变未对齐标签的对齐方式——这当然没有用。解决方案是更改锚设置 - 为什么它首先不起作用我不知道,我一定是用错了。因此解决方案是将两个网格框合并为一个(这有助于对齐它们的单元格),而不是将锚点设置在需要的左侧。面板对齐并没有取得太大的成就。我想我问的问题不够准确,因为这个问题没有很好的定义,没有图片的帮助也很难描述。

标签: java swing layout alignment gridbaglayout


【解决方案1】:

阅读 Fixing Alignment Problems 上的 Swing 教程部分。 BoxLayout 尊重组件的“对齐”属性。

如何将它们对齐到左侧?

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

【讨论】:

  • 那行不通 - 唯一的转变是我相信在网格单元格内部,它并没有改变单元格自身对齐的位置和方式。
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多