Java垂直布局拥抱左边缘

时间:2015-03-19 22:59:47

标签: java layout alignment

我在Java中遇到一些布局问题,下面的图片代表了我想要完成的任务。目前我正在使用;

Box vBox = Box.createVerticalBox();

垂直分隔项目,但它们倾向于分组在中心而不是 拥抱左边缘。实现这个目标的最佳方法是什么?

Layout

编辑:设置对齐方式;

JComboBox combo  = new JComboBox<Integer>(numPlayers);
combo.setMaximumSize(new Dimension(100, 30));
combo.setAlignmentX(JComponent.RIGHT_ALIGNMENT );
vBox.add(combo);

似乎没有正确对齐组件,而是将组件左边缘与面板的中心线对齐。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用垂直框。现在,您需要设置添加到框中的组件的对齐方式:

component.setAlignmentX( JComponent.LEFT_ALIGNMENT );
box.add( component );
...

编辑:

您可以使用GridBagLayout。当空间增加时,组件将保持在优选的尺寸。但是如果你将框架缩小得太小,组件将恢复为(0,0),这是最小尺寸。如果您不喜欢这种行为,那么您需要在所有组件上设置最小大小:

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

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        setLayout( new BorderLayout() );
        JComponent component;

        JPanel vBox = new JPanel( new GridBagLayout() );
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = GridBagConstraints.REMAINDER;

        component = new JTextField(10);
        gbc.anchor = GridBagConstraints.LINE_START;
        vBox.add(component, gbc);

        component = new JTextField(10);
        gbc.anchor = GridBagConstraints.LINE_END;
        vBox.add(component, gbc);

        component = new JTextField(30);
        gbc.anchor = GridBagConstraints.CENTER;
        vBox.add(component, gbc);
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}