I am new to java swing, I wrote a startup program to formart text, but i am confused with the layout,
the result is below:

I want the combobox and the button are placed middle of the ctrlPanel, and the combobox should not be stretched
 public class MainFrame extends JFrame {
private static final long serialVersionUID = 7553142908344084288L;
private static String[] formats = new String[] {
    "JSON",
    "XML",
    "YAML"
};
public MainFrame() {
    super("jValidator");
    Panel mainPanel = new Panel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
    setContentPane(mainPanel);
    JTextArea fromTextArea = new JTextArea(20, 40);
    JScrollPane fromTextAreaScrollPanel = new JScrollPane(fromTextArea);
    fromTextAreaScrollPanel.setPreferredSize(new Dimension(300, 300));
    fromTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
    mainPanel.add(fromTextAreaScrollPanel);
    JButton fmtButton = new JButton("Format >>");
    JComboBox jComboBox = new JComboBox(formats);
    jComboBox.setBorder(BorderFactory.createTitledBorder("Text Format"));
    JPanel ctrPanel = new JPanel();
    ctrPanel.setLayout(new BoxLayout(ctrPanel, BoxLayout.Y_AXIS));
    ctrPanel.setAlignmentY(Component.CENTER_ALIGNMENT);
    ctrPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
    ctrPanel.add(jComboBox);
    ctrPanel.add(Box.createRigidArea(new Dimension(50, 15)));
    ctrPanel.add(fmtButton);
    mainPanel.add(ctrPanel);
    JTextArea toTextArea = new JTextArea(20, 40);
    JScrollPane toTextAreaScrollPanel = new JScrollPane(toTextArea);
    toTextAreaScrollPanel.setPreferredSize(new Dimension(300, 300));
    toTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
    mainPanel.add(toTextAreaScrollPanel);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}
public static void main(String[] args) {
    new MainFrame();
}
 }
 
     
    
 
    
