Java 对齐机箱中的组件

Java 对齐机箱中的组件,java,swing,alignment,layout-manager,boxlayout,Java,Swing,Alignment,Layout Manager,Boxlayout,编辑:如果你否决了这个问题,你可以留下评论来解释原因,这将更有建设性 我得到了这个意想不到的结果 。。。使用此代码: import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; public class TestAlignment extends JFrame {

编辑:如果你否决了这个问题,你可以留下评论来解释原因,这将更有建设性

我得到了这个意想不到的结果

。。。使用此代码:

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TestAlignment extends JFrame {

    // Constructor
    public TestAlignment() {

        super("Test Alignment");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Components to show
        JLabel leftLabel = new JLabel("Left");
        JButton centerButton = new JButton("Middle");
        JLabel rightLabel = new JLabel("Right");

        // Add all to box
        Box box = Box.createVerticalBox();
        box.add(leftLabel);
        box.add(centerButton);
        box.add(rightLabel);
        box.add(Box.createHorizontalStrut(180));

        // Align content in box
        leftLabel.setAlignmentX(LEFT_ALIGNMENT);
        centerButton.setAlignmentX(CENTER_ALIGNMENT);
        rightLabel.setAlignmentX(RIGHT_ALIGNMENT);

        // Add box to frame, and show frame
        box.setOpaque(true);
        setContentPane(box);
        setVisible(true);
    }

    // Main
    public static void main(String[] args) {
        // Create frame in EDT
        SwingUtilities.invokeLater(new Runnable() {         
            @Override public void run() { new TestAlignment(); }
        });
    }
}
我现在了解到,对于
JComponent.setAlignmentX()
:这种方法告诉您必须对齐组件的哪一侧(顶部标签最左侧与按钮中心对齐,底部标签最右侧对齐)

我想了解如何让每个标签按照预期直观地对齐(左标签在左边,右标签在右边),标签接触盒子的垂直边缘


(我知道如何将每个标签放入一个内嵌的框中,并使用
Box.createHorizontalGlue()
将其强制向左或向右,但对我来说,为了对齐的简单目的似乎太多了。我正在寻找更简单的方法)

不要认为用BoxLayout可以做到这一点。您的示例确实显示了直观的代码,但并不像您希望的那样工作

我建议您可能需要使用GridBagLayout。我认为它支持setAlignmentX(…)方法,正如您所希望的那样

如果没有,则可以使用。它与BoxLayout一样易于使用,并且在使用时支持所需的对齐方式:

setAlignment( RelativeLayout.COMPONENT );
您可以使用BoxlOut:

        // Components to show
    // Left
    JLabel leftLabel = new JLabel("Left");
    JPanel leftPanel = new JPanel();
    leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.X_AXIS));
    leftPanel.add(leftLabel);
    leftPanel.add(Box.createHorizontalGlue());

    // Center
    JButton centerButton = new JButton("Middle");

    // Right
    JLabel rightLabel = new JLabel("Right");
    JPanel rightPanel = new JPanel();
    rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.X_AXIS));
    rightPanel.add(Box.createHorizontalGlue());
    rightPanel.add(rightLabel);

    // Add all to box
    Box box = Box.createVerticalBox();
    box.add(leftPanel);
    box.add(centerButton);
    box.add(rightPanel);
    box.add(Box.createHorizontalStrut(180));

    // Align content in box
    // leftLabel.setAlignmentX(LEFT_ALIGNMENT);
    centerButton.setAlignmentX(CENTER_ALIGNMENT);
    // rightLabel.setAlignmentX(RIGHT_ALIGNMENT);

我已经知道使用胶水可以做到这一点。如前所述,我正在寻找更简单的东西,如果它存在的话。无论如何,谢谢你的回答。如果你花了一点时间阅读有用的标签弹出窗口,你会意识到这与标签的定义无关。。