使用 BoxLayout 垂直居中内容
Vertically center content with BoxLayout
我正在尝试将带有 BoxLayout 的 JPanel 的内容垂直居中。 BoxLayout 与 Y 轴对齐,因此其中的项目水平对齐。
比如我现在拥有的:
-----------------------------
| ------ |
| ---------- |
| ---- |
| -------------- |
| |
| |
| |
| |
| |
| |
-----------------------------
我想要的:
-----------------------------
| |
| |
| |
| ------ |
| ---------- |
| ---- |
| -------------- |
| |
| |
| |
-----------------------------
目前,我正在使用 setAlignmentX(Component.CENTER_ALIGNMENT):
将元素列居中
JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
JLabel one = new JLabel("First element");
one.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(one);
JLabel two = new JLabel("Second element");
two.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(two);
...
如何将其更改为垂直居中?
当额外 space 可用时,BoxLayout
布局允许组件增长(达到最大尺寸)。
您需要添加允许增长的组件。基本代码为:
box.add( Box.createVerticalGlue() );
box.add(...);
box.add( Box.createVerticalGlue() );
top/bottom 上的两个 "glue" 组件将增长以填充可用的 space。
我正在尝试将带有 BoxLayout 的 JPanel 的内容垂直居中。 BoxLayout 与 Y 轴对齐,因此其中的项目水平对齐。
比如我现在拥有的:
-----------------------------
| ------ |
| ---------- |
| ---- |
| -------------- |
| |
| |
| |
| |
| |
| |
-----------------------------
我想要的:
-----------------------------
| |
| |
| |
| ------ |
| ---------- |
| ---- |
| -------------- |
| |
| |
| |
-----------------------------
目前,我正在使用 setAlignmentX(Component.CENTER_ALIGNMENT):
将元素列居中JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
JLabel one = new JLabel("First element");
one.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(one);
JLabel two = new JLabel("Second element");
two.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(two);
...
如何将其更改为垂直居中?
当额外 space 可用时,BoxLayout
布局允许组件增长(达到最大尺寸)。
您需要添加允许增长的组件。基本代码为:
box.add( Box.createVerticalGlue() );
box.add(...);
box.add( Box.createVerticalGlue() );
top/bottom 上的两个 "glue" 组件将增长以填充可用的 space。