简体   繁体   English

BoxLayout左对齐

[英]BoxLayout Left Alignment

I'm trying to left align the class and neutral buttons so they are in line with the left most card button. 我正在尝试将类别按钮和中性按钮向左对齐,以便它们与最左侧的卡片按钮对齐。 For some reason, setAlignmentX only shifts the buttons half way. 由于某些原因,setAlignmentX仅将按钮移动一半。 Here is the code. 这是代码。 Is there away to align the buttons? 有没有对准按钮的地方?

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);
}

It is not perfect solution, but you can use for example: 这不是完美的解决方案,但是您可以使用例如:

  1. If you want to keep buttons default size: 如果要保留按钮的默认大小:

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

    and delete: 并删除:

     buttonPanel.setAlignmentX(Component.RIGHT_ALIGNMENT); 
  2. If you want to fill buttonPanel with buttons: 如果buttonPanel按钮填充buttonPanel

     JPanel buttonPanel = new JPanel(new GridLayout(1,2,2,2)); buttonPanel.setBorder(new EmptyBorder(2,1,2,1)); 

In (FlowLayout.LEADING,1,2) and in EmptyBorder(2,1,2,1)) the 1,2 values are added to match buttonPanel and classCard hgap and vgap. (FlowLayout.LEADING,1,2)和在EmptyBorder(2,1,2,1))的1,2-值相加,以匹配buttonPanelclassCard hgap指定,vgap。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM