Java swing BoxLayout 中的中心面板组件



我正在尝试使用 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);

相关内容

  • 没有找到相关文章

最新更新