title: Java - Car Park system with GUI
body: <p>Im looking a little bit of help here.</p>
  
  <p>I have been given the task of creating a car park management system with a GUI interface as opposed to a console interface. The system has 15 spaces - 5 of those spaces being large can only fit 'large' vehicles - the other 10 are regular sized spaces. Whether they are large or not is determined by the parking attendant in the car park. </p>
  
  <p>Upon entry to the car park, the attendant is required to fill in information about the car (reg number of vehicle, and to click a Yes or No radio button for whether or not the car is of 'high value' or not, or also if the car is a 'large vehicle')</p>
  
  <p>I am currently trying to build the interface which when the program is run at first displays the car park (spaces will change from red to green when a space becomes available, and vice versa) which i have drawn using Graphics2D. (At this point i am not sure how to make this appear in a JFrame or whatever i need to use) Under the drawn car park with changing colours, i will include 3 JButtons - one to 'Add a Car', 'Remove a Car' and to 'Search for a Car.' I am unsure how to make the 'carPark' component and the afore mentioned JButtons to the window which will appear when it is run.</p>
  
  <p>Consequently when i click these buttons a new window will appear displaying a form relevant to each button (add, remove and search)</p>
  
  <p>What must i do to get the carpark and buttons to appear in the same window.</p>
  
  <p>Here is the code i have created thus far - although it is very untidy and in pretty much one class i know whats going on and plan to split it up once i have everthing working. (I know this isnt efficient for writing code):</p>
  
  <pre><code>package carparksystem;
  
  import javax.swing.*;
  import javax.swing.JTabbedPane;
  import javax.swing.JPanel;
  import java.awt.Color;
  
  
  public class DrawCarPark extends javax.swing.JFrame
  {
  public DrawCarPark()
  {   
      JButton addACar = new JButton("Add Car");
      JButton removeACar = new JButton("Remove Car");
      JButton searchCars = new JButton("Search Cars");
  
  
      JFrame frame = new JFrame();
      frame.add(new CarPark());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setTitle("Car Park System");
      frame.setSize(435, 600);
      frame.setVisible(true);
      frame.setResizable(false);
      //frame.add(addACar);
      //frame.add(removeACar);
      //frame.add(searchCars);
  
      GroupLayout mainLayout = new GroupLayout(getContentPane());      //chosen to display components in group layout
      getContentPane().setLayout(mainLayout);
      mainLayout.setAutoCreateGaps(true);
      mainLayout.setAutoCreateContainerGaps(true);
  
      mainLayout.setHorizontalGroup(mainLayout.createSequentialGroup()
          .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(frame)
              .addGroup(mainLayout.createSequentialGroup()
                  .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                      .addComponent(addACar))
                  .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                      .addComponent(removeACar))
                  .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                      .addComponent(searchCars))))
              );
  
      mainLayout.setVerticalGroup(mainLayout.createSequentialGroup()
          .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(frame)
          .addGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(addACar)
              .addComponent(removeACar)
              .addComponent(searchCars)))
          );
  
      //addCarForm();
      //removeCarForm();
      //searchCarForm();
  }
  
  private void addCarForm()
  {        
      /*JPanel panel = new JPanel();
      //frame.add(panel);
      panel.setSize(450, 650);
      panel.setVisible(true);
      panel.getSize();*/
  
      JLabel regNumLabel = new JLabel("Registration Number:");
      JLabel highValLabel = new JLabel("High Value?");
      JLabel largeLabel = new JLabel("Large Vehicle?");
  
      JRadioButton btnYesHighVal = new JRadioButton("Yes", false);
      JRadioButton btnNoHighVal = new JRadioButton("No", true);
      JRadioButton btnYesLarge = new JRadioButton("Yes", false);
      JRadioButton btnNoLarge = new JRadioButton("No", true);
  
      ButtonGroup highVal = new ButtonGroup();        //allows just one radio button from the group to be selected
      highVal.add(btnYesHighVal);
      highVal.add(btnNoHighVal);
  
      ButtonGroup largeCar = new ButtonGroup();       //allows just one radio button from the group to be selected
      largeCar.add(btnYesLarge);
      largeCar.add(btnNoLarge);
  
      JTextField regNumField = new JTextField();
  
      JButton addCar = new JButton("   Add  ");
      JButton addCancel = new JButton("Cancel");
  
      GroupLayout addLayout = new GroupLayout(getContentPane());      //chosen to display components in group layout
      getContentPane().setLayout(addLayout);
      addLayout.setAutoCreateGaps(true);
      addLayout.setAutoCreateContainerGaps(true);
  
      addLayout.setHorizontalGroup(addLayout.createSequentialGroup()
          .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumLabel)
              .addComponent(highValLabel)
              .addComponent(largeLabel))
          .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumField)
              .addGroup(addLayout.createSequentialGroup()
                  .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                  .addComponent(btnYesHighVal)
                  .addComponent(btnYesLarge))
              .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                  .addComponent(btnNoHighVal)
                  .addComponent(btnNoLarge))))
          .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(addCar)
              .addComponent(addCancel))
      );
  
      addLayout.setVerticalGroup(addLayout.createSequentialGroup()
          .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
              .addComponent(regNumLabel)
              .addComponent(regNumField)
              .addComponent(addCar))
          .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addGroup(addLayout.createSequentialGroup()
                  .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                      .addComponent(highValLabel)
                      .addComponent(btnYesHighVal)
                      .addComponent(btnNoHighVal))
                  .addGroup(addLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                      .addComponent(largeLabel)    
                      .addComponent(btnYesLarge)
                      .addComponent(btnNoLarge)))
                  .addComponent(addCancel))
          );
  
      setSize(375, 150);
      setTitle("Add Car");
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  }
  
  private void removeCarForm()
  {
      JLabel regNumLabel = new JLabel("Registration Number:");
      JTextField regNumField = new JTextField();
      JButton removeCar = new JButton("Remove");
      JButton removeCancel = new JButton("Cancel");
  
      GroupLayout removeLayout = new GroupLayout(getContentPane());
      getContentPane().setLayout(removeLayout);
      removeLayout.setAutoCreateGaps(true);
      removeLayout.setAutoCreateContainerGaps(true);
  
      removeLayout.setHorizontalGroup(removeLayout.createSequentialGroup()
          .addGroup(removeLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumLabel))
          .addGroup(removeLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumField))
          .addGroup(removeLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(removeCar)
              .addComponent(removeCancel))
      );
  
      removeLayout.setVerticalGroup(removeLayout.createSequentialGroup()
          .addGroup(removeLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
              .addComponent(regNumLabel)
              .addComponent(regNumField)
              .addComponent(removeCar))
          .addGroup(removeLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(removeCancel))
      );                
  
      setSize(375, 150);
      setTitle("Search Car");
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  }
  
  private void searchCarForm()
  {
      JLabel regNumLabel = new JLabel("Registration Number:");
      JTextField regNumField = new JTextField();
      JButton searchCar = new JButton("Search");
      JButton searchCancel = new JButton("Cancel");
  
      GroupLayout searchLayout = new GroupLayout(getContentPane());
      getContentPane().setLayout(searchLayout);
      searchLayout.setAutoCreateGaps(true);
      searchLayout.setAutoCreateContainerGaps(true);
  
      searchLayout.setHorizontalGroup(searchLayout.createSequentialGroup()
          .addGroup(searchLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumLabel))
          .addGroup(searchLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(regNumField))
          .addGroup(searchLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(searchCar)
              .addComponent(searchCancel))
      );
  
      searchLayout.setVerticalGroup(searchLayout.createSequentialGroup()
          .addGroup(searchLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
              .addComponent(regNumLabel)
              .addComponent(regNumField)
              .addComponent(searchCar))
          .addGroup(searchLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
              .addComponent(searchCancel))
      );                
  
      setSize(375, 150);
      setTitle("Remove Car");
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  }
  
  public static void main(String[]args)
  {
      DrawCarPark carPark = new DrawCarPark();
      carPark.setVisible(true);
  }
  }
  </code></pre>
  
  <p>Also here is my main menu class with the carPark i have drawn:</p>
  
  <pre><code>package carparksystem;
  
  import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  import javax.swing.JButton;
  
  public class CarPark extends javax.swing.JPanel
  {
  private void draw(Graphics g)
  {
      Graphics2D g2 = (Graphics2D) g;
  
      //Draw carpark boundary
      g2.drawLine(20, 20, 400, 20);
      g2.drawLine(20, 450, 20, 20);
      g2.drawLine(20, 450, 400, 450);
      g2.drawLine(400, 20, 400, 140);
      g2.drawLine(400, 330, 400, 450);
  
      g2.drawString("ENTER", 370, 180);           //labels
      g2.drawString("EXIT", 375, 300);
  
      g2.setColor(Color.WHITE);                   //attendants box
      g2.fill3DRect(330, 200, 70, 70, true);   
  
      g2.setColor(Color.BLACK);                   
      g2.drawString("Attendant", 338, 230);
      g2.drawString("Station", 345, 245);
      g2.drawRect(330, 200, 70, 70);
  
      g2.setColor(Color.GREEN);
      g2.fillRect(40, 40, 50, 100);       //8         first row spaces
      g2.fillRect(110, 40, 50, 100);      //7
      g2.fillRect(180, 40, 50, 100);      //6
      g2.fillRect(250, 60, 40, 80);       //2
      g2.fillRect(310, 60, 40, 80);       //1
  
      g2.setColor(Color.BLACK);           //drawRect palces a black border around shape
      g2.drawRect(40, 40, 50, 100);   
      g2.drawRect(110, 40, 50, 100);  
      g2.drawRect(180, 40, 50, 100);    
      g2.drawRect(250, 60, 40, 80);   
      g2.drawRect(310, 60, 40, 80);
  
      g2.setColor(Color.GREEN);                       //second row spaces
      g2.fillRect(90, 195, 40, 80);       //13
      g2.fillRect(150, 195, 40, 80);      //12
      g2.fillRect(210, 195, 40, 80);      //11
      g2.fillRect(270, 195, 40, 80);      //3
  
      g2.setColor(Color.BLACK);
      g2.drawRect(90, 195, 40, 80);  
      g2.drawRect(150, 195, 40, 80);
      g2.drawRect(210, 195, 40, 80);
      g2.drawRect(270, 195, 40, 80);
  
      g2.setColor(Color.GREEN);                       //3rd row spaces
      g2.fillRect(30, 330, 40, 80);       //15
      g2.fillRect(90, 330, 40, 80);      //14
      g2.fillRect(150, 330, 50, 100);     //10
      g2.fillRect(220, 330, 50, 100);     //9
      g2.fillRect(290, 330, 40, 80);      //5
      g2.fillRect(350, 330, 40, 80);      //4
  
      g2.setColor(Color.BLACK);
      g2.drawRect(30, 330, 40, 80);
      g2.drawRect(90, 330, 40, 80);
      g2.drawRect(150, 330, 50, 100);
      g2.drawRect(220, 330, 50, 100);
      g2.drawRect(290, 330, 40, 80);
      g2.drawRect(350, 330, 40, 80);
  
      g2.drawString("1", 328, 105);       //place labels on each shape
      g2.drawString("2", 268, 105);
      g2.drawString("3", 288, 240);
      g2.drawString("4", 368, 375);
      g2.drawString("5", 308, 375);
      g2.drawString("6", 203, 95);
      g2.drawString("7", 133, 95);
      g2.drawString("8", 63, 95);
      g2.drawString("9", 242, 385);
      g2.drawString("10", 168, 385);
      g2.drawString("11", 225, 240);
      g2.drawString("12", 165, 240);
      g2.drawString("13", 105, 240);
      g2.drawString("14", 103, 375);
      g2.drawString("15", 43, 375);
  }
  
  @Override
  public void paintComponent(Graphics g)
  {
      draw(g);
  }
  
  }
  </code></pre>
  
  <p>Thanks in advance if anyone is willing to help.</p>