我正在尝试使用 BoxLayout 垂直显示 2 个面板,我搜索了如何将这些面板中的组件居中。目前,我的组件放置在每个面板的顶部中心,我想将它们放在中心X和Y。
我在 2 个面板中添加了我想要的组件,然后在我的 BoxLayout 中添加了面板。通过这种方式,它们按照我想要的方式垂直显示,但正如我所说,我不希望它们位于顶部中心。
我尝试使用诸如setAlignementY和setLocation之类的方法,但是它们中的任何一个实际上都会移动组件。我还看到 BoxLayout 将尝试将组件设置为与最宽组件一样宽,但由于我只有 2 个具有相同大小的面板,我真的不明白它。
这基本上是我添加组件的方式(不尝试居中):
private void initPanels ()
{
this.titlePanel.add(this.title);
this.bookInputPanel.add(bookTitle);
this.bookInputPanel.add(bookInput);
this.authorInputPanel.add(by);
this.authorInputPanel.add(authorInput);
this.authorInputPanel.add(this.authorsTable);
this.buttonsPanel.add(confirm);
this.contentPanel.setLayout(new BoxLayout(this.contentPanel, BoxLayout.Y_AXIS));
this.contentPanel.add(bookInputPanel);
this.contentPanel.add(authorInputPanel);
this.add(this.titlePanel, BorderLayout.NORTH);
this.add(this.contentPanel, BorderLayout.CENTER);
this.add(this.buttonsPanel, BorderLayout.SOUTH);
}
我做了一张照片来向您展示我想要的东西,但似乎我需要 10 次才能做到这一点,对此感到抱歉。
通过这种方式,它们按照我想要的方式垂直显示,但正如我所说,我不希望它们位于顶部中心。
一种方法是在面板的顶部/底部添加"胶水"。此"胶水"将扩展以填充面板可用的额外空间:
this.contentPane.add(Box.createVerticalGlue());
this.contentPanel.add(bookInputPanel);
this.contentPanel.add(authorInputPanel);
this.contentPane.add(Box.createVerticalGlue());
阅读 Swing 教程中有关如何使用 BoxLayout 的部分,了解有关BoxLayout
功能的更多信息。
另一种选择可能是使用使用不同布局管理器的"包装器"面板。例如,具有默认约束的GridBagLayout
将自动将组件水平/垂直居中:
//this.add(this.contentPanel, BorderLayout.CENTER);
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add( contentPanel );
this.add(wrapper, BorderLayout.CENTER);