// Scott DeRuiter 3/6/2003 // Chase.java // Chases a ball around, implementing a MouseMotionListener in // a Swing Applet. // 3/13/2013 Greenstein: changed from applet to JFrame import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Chase implements MouseMotionListener { private int ballx, bally, xpos, ypos, changex, changey; private boolean moveball, caughtit; private JFrame frame; private MyPanel canvas; public Chase () { xpos = ypos = changex = changey = 0; ballx = bally = 200; moveball = caughtit = false; } public static void main(String[] args) { Chase ch = new Chase(); ch.Run(); } public void Run() { // Create a frame to hold everything frame = new JFrame ("Chase"); frame.setSize(500, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.setBackground(Color.black); // only needed if frame is larger than panel // Define panel to draw on canvas = new MyPanel(); // create a panel to draw on canvas.setBackground(Color.lightGray); canvas.addMouseMotionListener(this); // connects the addMouseMotionListener to the panel window // Put frame together frame.getContentPane().add(canvas); // puts panel on frame frame.setVisible(true); } class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor ( Color.blue ); g.fillOval ( ballx - 10, bally - 10, 20, 20 ); while ( moveball ) { g.setColor ( Color.lightGray ); g.fillOval ( ballx - 10, bally - 10, 20, 20 ); changex = (int)( Math.random() * 31 ) - 15; changey = (int)( Math.random() * 31 ) - 15; ballx += changex; bally += changey; if ( ballx > 380 ) ballx = 370; if ( ballx < 20 ) ballx = 30; if ( bally > 380 ) bally = 370; if ( bally < 20 ) bally = 30; if ( caughtit ) { g.setColor ( Color.red ); g.drawString ( "OOOHH, YOU GOT ME!!!", 20, 20 ); } else g.setColor ( Color.blue ); g.fillOval ( ballx - 10, bally - 10, 20, 20 ); if ( Math.abs ( xpos - ballx ) > 30 || Math.abs ( ypos - bally ) > 30 ) moveball = false; } caughtit = false; } public void mouseMoved ( MouseEvent e ) { xpos = e.getX(); ypos = e.getY(); if ( Math.abs ( xpos - ballx ) < 10 && Math.abs ( ypos - bally ) < 10 ) { caughtit = true; canvas.repaint(); } if ( Math.abs ( xpos - ballx ) < 35 && Math.abs ( ypos - bally ) < 35 ) { moveball = true; canvas.repaint(); } } public void mouseDragged ( MouseEvent e ) {} }