问题描述
我有一个 JPanel
,其中包含多个 JLabel
和一个 JTextPane
。我希望它们彼此低于(因此同一行上没有两个两个标签),并与左侧对齐。我尝试了几件事:
- 将
BoxLayout
与BoxLayout.Y_AXIS
一起使用可以正确地将所有元素置于彼此下方。但是,虽然JTextPane
正确地向左对齐,但JLabel
保持居中,即使调用了几种方法来尝试向左对齐(参见下面的代码)。 - 使用
GridLayout
将正确地将元素放在彼此下方并将它们向左对齐,但随后元素将垂直分布在整个JPanel
上,文本行之间有很大的空间。我希望所有元素都尽可能位于面板顶部。
private final void init() {
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
add(new JLabel("a"));
final JLabel label = new JLabel();
final JTextPane pane = new JTextPane();
add(label);
add(pane);
// these three lines seem to be ignored
label.setHorizontalAlignment(SwingConstants.LEFT);
label.setAlignmentX(LEFT_ALIGNMENT);
label.setHorizontalTextPosition(SwingConstants.LEFT);
pane.setForeground(Color.RED);
pane.setEditable(false);
}
我怎样才能做到这一点?
解决方法
我希望它们位于彼此下方(因此同一行上没有两个两个标签),并且向左对齐。
您需要在所有组件上设置对齐方式,包括 JTextPane。
add(new JLabel("a"));
当您没有引用该标签时,您希望如何更改该标签的对齐方式?
final JLabel label = new JLabel();
final JTextPane pane = new JTextPane();
add(label);
add(pane);
您没有设置上述组件的对齐方式。
阅读来自 Fixing Alignment Problems 上的 Swing 教程的部分