BoxLayout左对齐

时间:2015-07-09 15:57:58

标签: 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 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);
}

1 个答案:

答案 0 :(得分:0)

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

  1. 如果您想保持按钮默认大小:

    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,1,2));
    

    并删除:

    buttonPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
    
  2. 如果您想用按钮填充buttonPanel

    JPanel buttonPanel = new JPanel(new GridLayout(1,2,2,2));
    buttonPanel.setBorder(new EmptyBorder(2,1,2,1));
    
  3. (FlowLayout.LEADING,1,2)EmptyBorder(2,1,2,1))中添加1,2个值以匹配buttonPanelclassCard hgap和vgap。