java swing BoxLayout中的中心面板组件

时间:2018-12-23 13:27:34

标签: java swing boxlayout

我试图使用BoxLayout垂直显示2个面板,我搜索了如何在这些面板中居中放置组件。此刻,我的组件放置在每个面板的顶部中心,我想将它们放置在X和Y的中心。

我在2个面板中添加了所需的组件,然后在BoxLayout中添加了面板。这样,它们可以按照我希望的方式垂直显示,但正如我所说的,我不希望它们位于顶部中心。

我尝试使用诸如setAlignementY和setLocation之类的方法,但是它们中的任何一个实际上都会移动组件。我还看到BoxLayout将尝试将组件设置为与最宽的组件一样宽,但是由于我只有2个面板,它们的大小相同,所以我不太了解。

基本上,这就是我添加组件的方式(不尝试居中):

32

我拍了张照片,向您确切显示了我想要的东西,但似乎我需要10个代表才能做到,对不起。

1 个答案:

答案 0 :(得分:0)

  

这样,它们按照我希望的方式垂直显示,但正如我所说,我不希望它们位于顶部中心。

一种方法是在面板的顶部/底部添加“胶水”。这种“胶水”将扩展以填充面板可用的额外空间:

this.contentPane.add(Box.createVerticalGlue());
this.contentPanel.add(bookInputPanel);
this.contentPanel.add(authorInputPanel);
this.contentPane.add(Box.createVerticalGlue());

阅读How to Use BoxLayout上Swing教程中的部分,以获取有关BoxLayout功能的更多信息。

另一个选择可能是使用“包装器”面板,该面板使用其他布局管理器。例如,具有默认约束的GridBagLayout将自动使组件水平/垂直居中:

//this.add(this.contentPanel, BorderLayout.CENTER);
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add( contentPanel );
this.add(wrapper, BorderLayout.CENTER);