如何在JPanel中将所有元素左对齐?

49

我想让我的JPanel中所有元素都左对齐。我尝试通过以下方式实现:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setAlignmentX(Component.LEFT_ALIGNMENT);

Java使用元素的左侧作为元素位置的基准,然后将所有元素放置在JPanel的中心(而不是左侧部分)。

3个回答

117

我发现最简单的将对象放在左侧的方法是使用FlowLayout。

JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));

将组件正常添加到此面板将把它放在左侧


1
对我来说,需要进行强制类型转换:JPanel panel = new JPanel((LayoutManager) new FlowLayout(FlowLayout.LEFT)); - caw
1
@theUg 如果你过去6年一直在处理这个问题,Eclipse不会识别这个构造函数,除非你导入FlowLayout。我之前也被告知需要导入JPanel(LayoutManager),但是在导入FlowLayout类之后,那行代码就可以正常工作了。 - Lord Farquaad

14

你应该在想要对齐的组件上使用setAlignmentX(..),而不是在包含它们的容器上使用。

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(c1);
panel.add(c2);

c1.setAlignmentX(Component.LEFT_ALIGNMENT);
c2.setAlignmentX(Component.LEFT_ALIGNMENT);

5
我不这么认为。setAlignmentX(Component.LEFT_ALIGNMENT)的意思是使用组件左侧来对齐元素。同时,元素仍将居中对齐于JPanel。 - Roman
1
你确定吗?在这里看一下:http://www.java2s.com/Code/Java/Swing-JFC/ComponentAlignment.htm 方法setAlignmentX是用于添加到面板上的按钮,而不是面板本身。 - Jack
2
Jack,你说得对,这个方法是用在按钮上的,但它并没有你描述的效果。它并没有定义按钮的位置,而是定义了用于对齐的按钮部分。例如,“左侧”按钮将用于将按钮放置在中心位置(按钮的左侧将放置在中心)。 - Roman
这并不能帮助我将整个组件与其父级对齐。 - mvreijn

1

我最喜欢使用的方法是BorderLayout。以下是五个示例,每个位置都可以放置组件。示例是针对组件为按钮的情况。我们将其添加到JPanel p中。按钮将被称为b。

//To align it to the left
p.add(b, BorderLayout.WEST);

//To align it to the right
p.add(b, BorderLayout.EAST);

//To align it at the top
p.add(b, BorderLayout.NORTH);

//To align it to the bottom
p.add(b, BorderLayout.SOUTH);

//To align it to the center
p.add(b, BorderLayout.CENTER);

不要忘记输入以下代码以将其导入:

import java.awt.BorderLayout;

BorderLayout类中还有涉及方向等其他方法,但如果您对此感到好奇,可以自行进行研究。希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接