Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package se.chalmers.FSA.vehicle;
- import se.chalmers.FSA.vehicle.Model.CarModel;
- import javax.swing.*;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- /**
- * This class represents the full view of the MVC pattern of your car simulator.
- * It initializes with being center on the screen and attaching it's controller in it's state.
- * It communicates with the Controller by calling methods of it when an action fires of in
- * each of it's components.
- * TODO: Write more actionListeners and wire the rest of the buttons
- **/
- public class CarView extends JFrame {
- private static final int X = 800;
- private static final int Y = 800;
- // The controller member
- DrawPanel drawPanel;
- DrawCarInfo drawCarInfo;
- JPanel controlPanel = new JPanel();
- JPanel gasPanel = new JPanel();
- String[] carChoices = {"Random","Saab95","Volvo240","Scania"};
- JComboBox<String> carComboBox = new JComboBox<>(carChoices);
- int gasAmount = 0;
- int brakeAmount= 0;
- int carXCordinate = 0;
- int carYCordinate = 0;
- JSpinner xCoordinateSpinner;
- JSpinner yCordinateSpinner;
- JLabel xCordinateSpinnerLabel = new JLabel("Car starting X cordinate");
- JSpinner gasSpinner;
- JLabel gasSpinnerLabel = new JLabel("Gas/Brake", SwingConstants.CENTER);
- JButton gasButton = new JButton("Gas");
- JButton brakeButton = new JButton("Brake");
- JButton turboOnButton = new JButton("Turbo on");
- JButton turboOffButton = new JButton("Turbo off");
- JButton raiseBedButton = new JButton("Raise truck bed");
- JButton lowerBedButton = new JButton("Lower truck bed");
- JButton addCarButton = new JButton("Add a car");
- JButton removeCarButton = new JButton("Removes a car");
- JButton startButton = new JButton("Start all cars");
- JButton stopButton = new JButton("Stop all cars");
- // Constructor
- public CarView(String framename,CarController carC, CarModel carModel){
- this.drawPanel = new DrawPanel(X, Y-240, carModel);
- initComponents(framename,carC,carModel);
- }
- // Sets everything in place and fits everything
- // TODO: Take a good look and make sure you understand how these methods and components work
- private void initComponents(String title, CarController carC, CarModel carModel) {
- this.setTitle(title);
- this.setPreferredSize(new Dimension(X,Y));
- this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
- this.add(drawPanel);
- SpinnerModel gasSpinnerModel =
- new SpinnerNumberModel(0, //initial value
- 0, //min
- 100, //max
- 1);//step
- gasSpinner = new JSpinner(gasSpinnerModel);
- gasSpinner.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- gasAmount = (int) ((JSpinner)e.getSource()).getValue();
- brakeAmount = (int) ((JSpinner)e.getSource()).getValue();
- }
- });
- SpinnerModel xCordinateSpinnerModel =
- new SpinnerNumberModel(0, //initial value
- 0, //min
- 800, //max
- 1);//step
- xCoordinateSpinner = new JSpinner(xCordinateSpinnerModel);
- xCoordinateSpinner.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- carXCordinate = (int) ((JSpinner)e.getSource()).getValue();
- }
- });
- gasPanel.setLayout(new GridLayout(2,1));
- gasPanel.add(gasSpinnerLabel, 0);
- gasPanel.add(gasSpinner, 1);
- gasPanel.setPreferredSize(new Dimension((X/10), 200));
- gasPanel.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
- gasPanel.setBackground(Color.CYAN);
- this.add(gasPanel);
- controlPanel.setLayout(new GridLayout(2,5));
- controlPanel.add(gasButton, 0);
- controlPanel.add(turboOnButton, 1);
- controlPanel.add(raiseBedButton, 2);
- controlPanel.add(brakeButton, 3);
- controlPanel.add(turboOffButton, 4);
- controlPanel.add(lowerBedButton, 5);
- controlPanel.add(addCarButton,6);
- controlPanel.add(removeCarButton, 7);
- controlPanel.add(carComboBox, 8);
- controlPanel.add(xCoordinateSpinner, 9);
- controlPanel.setPreferredSize(new Dimension((X/2)+75, 200));
- this.add(controlPanel);
- controlPanel.setBackground(Color.CYAN);
- startButton.setBackground(Color.blue);
- startButton.setForeground(Color.green);
- startButton.setPreferredSize(new Dimension(X/7,200));
- this.add(startButton);
- stopButton.setBackground(Color.red);
- stopButton.setForeground(Color.black);
- stopButton.setPreferredSize(new Dimension(X/7,200));
- this.add(stopButton);
- // This actionListener is for the gas button only
- // TODO: Create more for each component as necessary
- gasButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.gas(gasAmount);
- }
- });
- stopButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.stopEngine();
- }
- });
- startButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.startEngine();
- }
- });
- brakeButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.brake(brakeAmount);
- }
- });
- turboOnButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.turboOn();
- }
- });
- turboOffButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.turboOff();
- }
- });
- raiseBedButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.raiseTruckBed();
- }
- });
- lowerBedButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.lowerTruckBed();
- }
- });
- addCarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- switch (carComboBox.getItemAt(carComboBox.getSelectedIndex())){
- case "Saab95":
- carC.addNewSaab95(carXCordinate,0);
- break;
- case "Volvo240":
- carC.addNewVolvo240(carXCordinate,0);
- break;
- case "Scania":
- carC.addNewScania(carXCordinate,0);
- break;
- case "Random":
- carC.addRandomCar(carXCordinate,0);
- }
- }
- });
- removeCarButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- carC.removeCar();
- }
- });
- // Make the frame pack all it's components by respecting the sizes if possible.
- this.pack();
- // Get the computer screen resolution
- Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
- // Center the frame
- this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);
- // Make the frame visible
- this.setVisible(true);
- // Make sure the frame exits when "x" is pressed
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement