Hi, I'm writing a paint application for my java class. I've gotten the JFrame to look the way it's supposed to, and everything looks in order, but I can't draw. Something's wrong but I can't tell what it is. Can anyone help?
Code:
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;

public class PaintApp extends JFrame implements ActionListener, ChangeListener, MouseMotionListener, MouseListener
{      JLabel textprompt = new JLabel("Enter text, then click location:");
	JTextField textinput = new JTextField("", 25);

	ImageIcon eraserIcon = new ImageIcon("eraser.jpg");
	JButton eraser = new JButton(eraserIcon);

	ImageIcon pencilIcon = new ImageIcon("pencil.jpg");
	JButton pencil = new JButton(pencilIcon);
	
	ImageIcon brushIcon = new ImageIcon("brush.jpg");
	JButton brush = new JButton(brushIcon);
	
	ImageIcon textIcon = new ImageIcon("text.jpg");
	JButton text = new JButton (textIcon);
	
	JLabel stroke = new JLabel("Stroke:");
	JSlider sliderbar = new JSlider(JSlider.VERTICAL, 0,3,3);

	ImageIcon redIcon = new ImageIcon("red.gif");
	JButton redCrayon = new JButton (redIcon);

	ImageIcon yellowIcon = new ImageIcon("yellow.gif");
	JButton yellowCrayon = new JButton (yellowIcon);
	
	ImageIcon greenIcon = new ImageIcon("green.gif");
	JButton greenCrayon = new JButton (greenIcon);
	
	ImageIcon blueIcon = new ImageIcon("blue.gif");
	JButton blueCrayon = new JButton (blueIcon);
	
	JPanel topPanel = new JPanel(new FlowLayout());
	JPanel centerPanel = new JPanel(new FlowLayout());
	JPanel sidePanel = new JPanel(new GridLayout(6,1));
	JPanel bottomPanel = new JPanel(new GridLayout(2,2));

	boolean eraserOn = false;
	boolean pencilOn = false; 
	boolean brushOn = false;
	boolean textOn = false; 
	int last_x=-10;
	int last_y=-10;
	int xpos=-10;
	int ypos=-10;
	Color drawColor = (Color.RED);
	Font font1 = new Font("Arial", Font.PLAIN, 20);
	int value;
	JMenuBar menuBar = new JMenuBar();
	JMenu file = new JMenu("File");
	JMenuItem newopt = new JMenuItem("New");
	JMenuItem exit = new JMenuItem("Exit");
	JMenu help = new JMenu("Help");
	JMenuItem about = new JMenuItem("About");
	JLabel createdby = new JLabel("Created by LV");
	float lineWeight;	
	BasicStroke str = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 
	Container con = null;

	public PaintApp()
	{
	    super("My Paint Program");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		
	    con = this.getContentPane(); 
	    con.setLayout(new BorderLayout()); 
		
	    setJMenuBar(menuBar);
	    menuBar.add(file);
	    menuBar.add(help);
	    file.add(newopt);
	    file.add(exit);
	    help.add(about);
	    newopt.addActionListener(this);
	    exit.addActionListener(this);
	    about.addActionListener(this);
	       
		topPanel.add(textprompt);
		textprompt.setEnabled(false);
		topPanel.add(textinput);
		textinput.setEditable(false);

		centerPanel.setBackground(Color.white);
		centerPanel.add(createdby);
	        createdby.setVisible(false);

		sidePanel.add(eraser);
		eraser.setBorder(new BevelBorder(BevelBorder.RAISED));
		eraser.addActionListener(this);

		sidePanel.add(pencil);
		pencil.setBorder(new BevelBorder(BevelBorder.LOWERED));
		pencil.addActionListener(this);
		
		sidePanel.add(brush);
		brush.setBorder(new BevelBorder(BevelBorder.RAISED));
		brush.addActionListener(this);
		
		sidePanel.add(text);
		sidePanel.setBackground(Color.WHITE);
		text.setBorder(new BevelBorder(BevelBorder.RAISED));
		text.addActionListener(this);
		
		sidePanel.add(stroke);
		
		sidePanel.add(sliderbar);
	    sliderbar.setMinorTickSpacing(1);
	    sliderbar.setMajorTickSpacing(1);
	    sliderbar.setPaintTicks(true);
	    sliderbar.setPaintLabels(true);
	    sliderbar.setSnapToTicks(true);
	    
	    Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
	    labelTable.put(new Integer( 0 ), new JLabel("Thin") );
	    labelTable.put(new Integer(3), new JLabel("Thick") );
	    sliderbar.setLabelTable( labelTable );
	    sliderbar.addChangeListener(this);
		
		bottomPanel.add(redCrayon);
		redCrayon.setBorder(new BevelBorder(BevelBorder.LOWERED));
		redCrayon.addActionListener(this);
		
		bottomPanel.add(yellowCrayon);
		yellowCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
		yellowCrayon.addActionListener(this);
		
		bottomPanel.add(greenCrayon);
		greenCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
		greenCrayon.addActionListener(this);
		
		bottomPanel.add(blueCrayon);
		blueCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
		blueCrayon.addActionListener(this);
		
		con.add(topPanel, BorderLayout.NORTH);
		con.add(centerPanel, BorderLayout.CENTER);
		con.add(sidePanel, BorderLayout.WEST);
		con.add(bottomPanel, BorderLayout.SOUTH);
	}
	public void actionPerformed(ActionEvent e) 
	{      Object source = e.getSource();
                if (source == exit)
		{
			System.exit(0);
		}
		if (source == newopt)
		{centerPanel.repaint();
		}
		if (source == about)
		{createdby.setVisible(true);
		}
		if (source == eraser)
		{      eraser.setBorder(new BevelBorder(BevelBorder.LOWERED));
			pencil.setBorder(new BevelBorder(BevelBorder.RAISED));
			brush.setBorder(new BevelBorder(BevelBorder.RAISED));
			text.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.white);
			eraserOn = true;
		}
		if (source == pencil)
		{
			eraser.setBorder(new BevelBorder(BevelBorder.RAISED));
			pencil.setBorder(new BevelBorder(BevelBorder.LOWERED));
			brush.setBorder(new BevelBorder(BevelBorder.RAISED));
			text.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.red);
			pencilOn = true;
		}
		if (source == brush)
		{      eraser.setBorder(new BevelBorder(BevelBorder.RAISED));
			pencil.setBorder(new BevelBorder(BevelBorder.RAISED));
			brush.setBorder(new BevelBorder(BevelBorder.LOWERED));
			text.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.red);
			brushOn = true;
		}
		if (source == text)
		{	eraser.setBorder(new BevelBorder(BevelBorder.RAISED));
			pencil.setBorder(new BevelBorder(BevelBorder.RAISED));
			brush.setBorder(new BevelBorder(BevelBorder.RAISED));
			text.setBorder(new BevelBorder(BevelBorder.LOWERED));
			drawColor = (Color.red);
			textprompt.setEnabled(true);
			textinput.setEditable(true);
			textOn = true;	
		}
		
		if (source == redCrayon)
		{	redCrayon.setBorder(new BevelBorder(BevelBorder.LOWERED));
			yellowCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			greenCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			blueCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.red);
		}
		
		if (source == yellowCrayon)
		{      redCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			yellowCrayon.setBorder(new BevelBorder(BevelBorder.LOWERED));
			greenCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			blueCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.yellow);
		}
		
		if (source == greenCrayon)
		{      redCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			yellowCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			greenCrayon.setBorder(new BevelBorder(BevelBorder.LOWERED));
			blueCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			drawColor = (Color.green);
		}
		
		if (source == blueCrayon)
		{
			redCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			yellowCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			greenCrayon.setBorder(new BevelBorder(BevelBorder.RAISED));
			blueCrayon.setBorder(new BevelBorder(BevelBorder.LOWERED));
			drawColor = (Color.blue);
		}
	}
	
	public void mousePressed(MouseEvent e) {
		last_x = e.getX();
		last_y = e.getY();
		Graphics gr = getGraphics();
		if(textOn == true)
		{
			String s = textinput.getText();
			gr.setColor(drawColor);
			gr.setFont(font1);
			gr.drawString(s, last_x, last_y);
		}
	}
	
	public void mouseDragged(MouseEvent e) 
	{
	    xpos=e.getX();
	    ypos=e.getY();
	    Graphics gr = getGraphics();
	    gr.setColor(drawColor);
	    gr.drawLine(last_x,last_y,xpos,ypos);
  
	    Graphics2D gr2d = (Graphics2D)gr;
	    BasicStroke drawLine = new BasicStroke(lineWeight, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
	    gr2d.setStroke(drawLine);
	    if (eraserOn == true)
	    {
	    	gr2d.drawLine(last_x, last_y, xpos, ypos);
	    }
	    if (brushOn == true)
	    {
	    	gr2d.drawLine(last_x, last_y, xpos, ypos);
	    }
		gr2d.setStroke(str);
		
		last_x = xpos;
		last_y = ypos;
		
		topPanel.repaint();
		menuBar.repaint();
		eraser.repaint();
		pencil.repaint();
		brush.repaint();
		text.repaint();
		stroke.repaint();
		sliderbar.repaint();
		redCrayon.repaint();
		yellowCrayon.repaint();
		greenCrayon.repaint();
		blueCrayon.repaint();
	}

	public void mouseMoved(MouseEvent e){}
	public void mouseClicked(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e){}

	public void stateChanged(ChangeEvent e) 
	{
		JSlider source = (JSlider)e.getSource();
		
		value = source.getValue();
		
			if (value==1)
			{
				lineWeight = 5;
			}
			
			if (value==2)
			{
				lineWeight = 10;
			}
			
			if (value==3)
			{
				lineWeight = 20;
			}
	}
	public static void main(String[] args) 
	{
		PaintApp aFrame = new PaintApp();
		Image img = Toolkit.getDefaultToolkit().getImage("IconImage.gif");
		aFrame.setIconImage(img);
		aFrame.setSize(750,550);
		aFrame.setResizable(false);
		aFrame.setVisible(true);
		aFrame.setLocationRelativeTo(null);
	}
}