如何使BoxLayout左对齐?

3
我创建了一个包含JLabel和带有JTextAreaJScrollPaneBox。但是JLabel左侧总是有一些空间:

Jlabel not fully left-aligned

完整演示代码:

import java.awt.*;
import javax.swing.*;

public class BoxAlignmentTest extends JFrame {

    public static void main(String[] args) {
        BoxAlignmentTest test = new BoxAlignmentTest();
        test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        test.setSize(500, 200);
        test.setVisible(true);
    }

    public BoxAlignmentTest() throws HeadlessException {
        Box box = Box.createVerticalBox();
        setContentPane(box);

        JLabel label = new JLabel("This label isn't fully left-aligned.");
        label.setOpaque(true);
        label.setBackground(Color.orange);
        label.setAlignmentX(Component.LEFT_ALIGNMENT);  // Set left alignment

        box.add(label);
        box.add(new JScrollPane(new JTextArea("This is a text area.")));
    }
}

2
不要使用 BoxLayout ;)。对于您的情况,最好使用 BorderLayout。通常情况下,请使用 GridBagLayout 或第三方布局(如 MigLayoutFormLayout)。 - Sergiy Medvynskyy
@SergiyMedvynskyy 这只是一个测试代码,只有两个组件。如果我无法解决这个简单的问题,那么布局更多组件可能会非常困难。 - JSPDeveloper01
2个回答

3

BoxLayout 如何使用(Java™ 教程 > 使用 JFC/Swing 创建 GUI > 在容器中布置组件)
X 对齐不仅影响组件之间的位置关系,还影响组件作为一组在其容器内的位置。

因此,需要为 JLabelJScrollPane 都设置 setAlignmentX(Component.LEFT_ALIGNMENT)

import java.awt.*;
import javax.swing.*;

public class BoxAlignmentTest2 extends JFrame {
  public static void main(String[] args) {
    EventQueue.invokeLater(() -> {
      BoxAlignmentTest2 test = new BoxAlignmentTest2();
      test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      test.setSize(500, 200);
      test.setVisible(true);
    });
  }

  public BoxAlignmentTest2() throws HeadlessException {
    JLabel label = new JLabel("This label isn't fully left-aligned.");
    label.setOpaque(true);
    label.setBackground(Color.orange);
    label.setAlignmentX(Component.LEFT_ALIGNMENT); // Set left alignment

    JScrollPane scroll = new JScrollPane(new JTextArea("This is a text area."));
    scroll.setAlignmentX(Component.LEFT_ALIGNMENT); // <- add

    Box box = Box.createVerticalBox();
    box.add(label);
    box.add(scroll);

    add(box); // = getContentPane().add(box, BorderLayout.CENTER);
  }
}

0

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