package com.jcdj1996.final03;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import lejos.nxt.Sound;
public class Display implements ActionListener, ChangeListener{
static Robot r1 = new Robot();
static MoveSet m1 = new MoveSet();
static MyPanel p1 = new MyPanel();
static JFrame panel;
static JPanel contentPane; //holds all other JPanels
static JPanel buttons; //preprogrammed moves
static JPanel sliders; //speed and steering
static JButton figure8; //triggers figure8
static JButton fireButton; //fire from GUI
static JButton horn; //Play horn
static JSlider speedSlide; //Speed Slider
static JSlider steerSlide; //Steering Slider
public void init(){
panel = new JFrame("Rover Controller");
panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// the box layout puts objects in a vertical column
contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
contentPane.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
contentPane.setBackground(Color.blue);
// Add content pane to frame
panel.setContentPane(contentPane);
contentPane.setLayout(new GridLayout(1,0));
buttons = new JPanel();
buttons.setLayout(new BoxLayout(buttons,BoxLayout.PAGE_AXIS));
buttons.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
buttons.setBackground(Color.WHITE);
buttons.setLayout(new GridLayout(0,1));
contentPane.add(buttons);
sliders = new JPanel();
sliders.setLayout(new BoxLayout(sliders,BoxLayout.PAGE_AXIS));
sliders.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
sliders.setBackground(Color.GREEN);
sliders.setLayout(new GridLayout(0,1));
contentPane.add(sliders);
contentPane.add(new MyPanel()); //add paint surface (far right)
// Size and then display the window.
panel.setSize(800,500);
panel.setLocation(300,100);
panel.setVisible(true);
//Buttons
figure8 = new JButton("Figure Eight");
buttons.add(figure8);
figure8.addActionListener(this);
fireButton = new JButton("Fire (trigger)");
buttons.add(fireButton);
fireButton.addActionListener(this);
horn = new JButton("Horn (Button 3)");
horn.addActionListener(this);
buttons.add(horn);
//Sliders
speedSlide = new JSlider(JSlider.VERTICAL, -720,720, 0);
speedSlide.addChangeListener(this);
speedSlide.setMajorTickSpacing(180);
speedSlide.setPaintTicks(true);
speedSlide.setPaintLabels(true);
speedSlide.setSnapToTicks(true);
speedSlide.setName("Speed");
sliders.add(speedSlide);
steerSlide = new JSlider(JSlider.HORIZONTAL,-10, 10, 0);
steerSlide.addChangeListener(this);
steerSlide.setMajorTickSpacing(1);
steerSlide.setPaintTicks(true);
steerSlide.setPaintLabels(false);
steerSlide.setSnapToTicks(true);
sliders.add(steerSlide);
}
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource()==figure8)
{
m1.figure8(); //activate figure 8
}
if(arg0.getSource()==fireButton) //fire button is pressed
{
r1.fire();
}
if(arg0.getSource() == horn)
{
Sound.playTone(500, 500); //play tone from robot speaker
}
}
public void stateChanged(ChangeEvent a) {
if(a.getSource()==speedSlide)
{
r1.setSpeed(speedSlide.getValue()*-1); //drive motor is reversed, value must be flipped
}
if(a.getSource()==steerSlide)
{
r1.turn(steerSlide.getValue()); //turn to the value of the steering slider
}
}
}
class MyPanel extends JPanel implements ActionListener{
private static final long serialVersionUID = 1L;
Timer timer1 = new Timer(10,this);
public static int xpos=45,ypos=45;
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
timer1.start();
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
//JStick graphics
g.setColor(Color.BLACK);
g.fillRect(0, 0, 1000, 1000);
if(final03.JStickAvail==false)
{
g.setColor(Color.BLUE);
g.drawString("No Joystick Found", 15,45);
}else{
g.setColor(Color.WHITE);
g.drawLine(50,0,50,100); //grid for JS position
g.drawLine(0,50,100,50);
g.setColor(Color.RED);
g.fillOval(xpos, ypos, 10, 10); //circle for JS position
g.drawString("Joystick input", 15, 111);
}
}
public void actionPerformed(ActionEvent arg0) {
repaint(); //repaint on timer
}
}