Java BoxLayout左对齐

Java BoxLayout左对齐,java,swing,layout-manager,Java,Swing,Layout Manager,我试图将类按钮和中性按钮左对齐,使它们与最左边的卡片按钮对齐。出于某些原因,setAlignmentX仅将按钮移动了一半。这是代码。有没有办法把按钮对齐 private String[] listEntries = {"a","a","a","a","a"}; private JButton remove = new JButton("Remove"); private JList list; private JButton b1 = new JButton("Class"); private

我试图将类按钮和中性按钮左对齐,使它们与最左边的卡片按钮对齐。出于某些原因,setAlignmentX仅将按钮移动了一半。这是代码。有没有办法把按钮对齐

private String[] listEntries = {"a","a","a","a","a"};
private JButton remove = new JButton("Remove");
private JList list;
private JButton b1 = new JButton("Class");
private JButton b2 = new JButton("Neutral");
private JPanel page = new JPanel(new CardLayout());
private DefaultListModel listModel = new DefaultListModel();

public Main () {

    JPanel leftPanel = new JPanel();
    JPanel rightPanel = new JPanel();
    rightPanel.setLayout(new BoxLayout(rightPanel,BoxLayout.PAGE_AXIS));
    leftPanel.setLayout(new BoxLayout(leftPanel,BoxLayout.PAGE_AXIS));
    rightPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    leftPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    JLabel title  = new JLabel("Deck Constructor", SwingConstants.CENTER);
    title.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));

    //Set up Deck List 
    list = new JList(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    list.setLayoutOrientation(JList.VERTICAL);
    list.setVisibleRowCount(-1);

    JScrollPane listScroller = new JScrollPane(list);
    listScroller.setPreferredSize(new Dimension(150, 80));

    JLabel listTitle = new JLabel("List");
    listTitle.setLabelFor(list);
    listScroller.setAlignmentX(LEFT_ALIGNMENT);


    rightPanel.add(listTitle);
    rightPanel.add(listScroller);
    rightPanel.add(remove);

    //Set up Card Selection
    JPanel buttonPanel = new JPanel();
    buttonPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);

    b1.setActionCommand("Class");
    b2.setActionCommand("Neutral");
    b1.addActionListener(this);
    b2.addActionListener(this);
    buttonPanel.add(b1);
    buttonPanel.add(b2);

    JPanel classCards = new JPanel(new GridLayout(2,3, 10, 10));
    JButton card1 = new JButton("Card 1");
    card1.addActionListener(this);
    card1.setActionCommand("addCard");
    JButton card2 = new JButton("Card 2");
    JButton card3 = new JButton("Card 3");
    JButton card4 = new JButton("Card 4");
    JButton card5 = new JButton("Card 5");
    JButton card6 = new JButton("Card 6");
    classCards.add(card1);
    classCards.add(card2);
    classCards.add(card3);
    classCards.add(card4);
    classCards.add(card5);
    classCards.add(card6);


    JPanel neutral = new JPanel();
    neutral.setBackground(Color.BLUE);
    page.add(classCards, "Class");
    page.add(neutral, "Neutral");

    leftPanel.add(buttonPanel);
    leftPanel.add(page);


    setPreferredSize(new Dimension(640,640/12*9));
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getContentPane().add(leftPanel,BorderLayout.CENTER);
    getContentPane().add(rightPanel,BorderLayout.EAST);
    getContentPane().add(title,BorderLayout.NORTH);
    pack();
    setVisible(true);
}

这不是完美的解决方案,但您可以使用以下示例:

  • 如果要保持按钮的默认大小:

    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,1,2));
    
    并删除:

    buttonPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
    
  • 如果要用按钮填充
    按钮面板

    JPanel buttonPanel = new JPanel(new GridLayout(1,2,2,2));
    buttonPanel.setBorder(new EmptyBorder(2,1,2,1));
    
  • (FlowLayout.LEADING,1,2)
    清空顺序(2,1,2,1))
    中,添加1,2个值以匹配
    按钮面板
    类卡
    hgap和vgap