title: How can I center align a group of Components with a Swing Layout Manager in Spring
body: <p>I am trying to create a form in Swing.</p>
  
  <p>The form should look similar to this:</p>
  
  <pre><code> ____________________________________
  |___________________________________X|
  |                                    |
  |              ________________      |
  |      label1 [________________]     |
  |              ________________      |
  |      label2 [________________]     |
  |                                    |
  |                                    |
  |                     [Save] [Close] |
  |____________________________________|
  </code></pre>
  
  <p>But I'm having trouble center aligning the text fields vertically.</p>
  
  <p>Below is the code for opening the frame:</p>
  
  <pre><code>public class Main {
  
      public static void main(String args[]) {
          SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                  LayoutTest test = new LayoutTest();
                  test.setVisible(true);
              }
          });
      }
  }
  </code></pre>
  
  <p>Here is the code for initialing the fields and creating the layout:</p>
  
  <pre><code>public class LayoutTest {
      private JFrame testFrame;
  
      JLabel label1;
      JTextField field1;
  
      JLabel label2;
      JTextField field2;
  
      JButton saveButton;
      JButton closeButton;
  
      public LayoutTest() {
          testFrame = new JFrame();
  
          initProperties();
          initContent();
          initLayout();
      }
  
      private void initProperties() {
          testFrame.setTitle("Test");
          testFrame.setSize(1000, 800);
          testFrame.setLocationRelativeTo(null);
          testFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      }
  
      private void initContent() {
          label1= new JLabel("Label 1");
          field1= new JTextField(25);
          label1.setLabelFor(field1);
  
          label2= new JLabel("Label 2");
          field2= new JTextField(25);
          label2.setLabelFor(field2);
  
          saveButton = new JButton("Save");
  
          closeButton = new JButton("Close");
          closeButton.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent event) {
                  System.exit(0);
              }
          });
  
          testFrame.add(label1);
          testFrame.add(field1);
          testFrame.add(label2);
          testFrame.add(field2);
          testFrame.add(saveButton);
          testFrame.add(closeButton);
      }
  
      private void initLayout() {
          SpringLayout layout = new SpringLayout();
  
          layout.putConstraint(SpringLayout.NORTH, label1, 10, SpringLayout.NORTH, testFrame.getContentPane());
          layout.putConstraint(SpringLayout.EAST, label1, -5, SpringLayout.WEST, field1);
  
          layout.putConstraint(SpringLayout.NORTH, field1, 10, SpringLayout.NORTH, testFrame.getContentPane());
          layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, field1, -10, SpringLayout.HORIZONTAL_CENTER, testFrame.getContentPane());
  
          layout.putConstraint(SpringLayout.NORTH, label2, 10, SpringLayout.SOUTH, label1);
          layout.putConstraint(SpringLayout.EAST, label2, -5, SpringLayout.WEST, field2);
  
          layout.putConstraint(SpringLayout.NORTH, field2, 5, SpringLayout.SOUTH, field1);
          layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, field2, -10, SpringLayout.HORIZONTAL_CENTER, testFrame.getContentPane());
  
  
          layout.putConstraint(SpringLayout.SOUTH, closeButton, -20, SpringLayout.SOUTH, testFrame.getContentPane());
          layout.putConstraint(SpringLayout.EAST, closeButton, -20, SpringLayout.EAST, testFrame.getContentPane());
  
          layout.putConstraint(SpringLayout.SOUTH, saveButton, -20, SpringLayout.SOUTH, testFrame.getContentPane());
          layout.putConstraint(SpringLayout.EAST, saveButton, -10, SpringLayout.WEST, closeButton);
  
          testFrame.setLayout(layout);
      }
  
      public void setVisible(boolean visible) {
          testFrame.setVisible(visible);
      }
  }
  </code></pre>
  
  <p>I've tried to add the fields to a panel and then use <code>SpringLayout.VERTICAL_CENTER</code> on the panel but nothing showed up.</p>
  
  <p>How can I center align the fields as a group?</p>