import javax.swing.JFrame;
import java.awt.Container;

public class PhysicsLab {
   public static void main(String[] args) {
      LabFrame labFrame = new LabFrame();
      labFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      labFrame.setVisible(true);
   }
}

class LabFrame extends JFrame {
   public LabFrame() {
      setTitle("Blocks and Springs Laboratory");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      BlockSpringConfiguration bsConfig = new BlockSpringConfiguration();
      LabPanel labPanel = new LabPanel(bsConfig);
      bsConfig.setLabPanel(labPanel);   // to repaint view when model changes
      InsertElementListener ieListener = new InsertElementListener(bsConfig);
      Simulator sim = new Simulator(bsConfig);
      SimulatorListener sListener = new SimulatorListener(sim);
      LabMenuBar menuBar = new LabMenuBar(ieListener, sListener);
      MouseListener mListener = new MouseListener(bsConfig, labPanel);
      labPanel.addMouseMotionListener(mListener);
      labPanel.addMouseListener(mListener);
      Container contentPane = getContentPane();
      contentPane.add(labPanel);
      setJMenuBar(menuBar);
   }
   public static final int DEFAULT_WIDTH = 500;
   public static final int DEFAULT_HEIGHT = 400;
}
