1 /* 2 * MouseEvents.java 3 * 4 * MouseEvents and movable objects 5 */ 6 7 import java.applet.*; 8 import java.awt.*; 9 import java.awt.event.*; 10 11 public class MouseEvents extends Applet 12 implements MouseListener, MouseMotionListener { 13 14 // Instance variables: 15 private final int numObj = 3; // number of movable objects 16 private MovableObject object[]; // array of movable objects 17 private Image buffer; // image object for double buffering 18 private Graphics gOffScreen; // graphics object for double buffering 19 20 // Mouse handling variables: 21 private int current = -1; // index of object being dragged 22 private int hit = -1; // index of object containing cursor 23 private int xoffset = 0; // relative x-coordinate of mouse click 24 private int yoffset = 0; // relative y-coordinate of mouse click 25 26 // Default object color: 27 private final Color objColor = Color.cyan; 28 // Selected object color: 29 private final Color objColorSelect = Color.red; 30 // Applet colors: 31 private final Color bgColor = Color.black; 32 private final Color fgColor = Color.white; 33 34 public void init() { 35 36 setBackground( bgColor ); 37 setForeground( fgColor ); 38 39 // Instantiate object array: 40 object = new MovableObject[ numObj ]; 41 42 // Instantiate a rectangle: 43 object[0] = new MovableRectangle( 10, 10, 100, 100 ); 44 object[0].setColor( objColor ); 45 46 // Instantiate a circle: 47 object[1] = new MovableOval( 200, 10, 100, 100 ); 48 object[1].setColor( objColor ); 49 50 // Instantiate a triangle: 51 object[2] = new MovableTriangle( 10, 200, 100, 100 ); 52 object[2].setColor( objColor ); 53 54 // Create an off-screen image for double buffering: 55 buffer = createImage( getSize().width, getSize().height ); 56 // Get off-screen graphics context: 57 gOffScreen = buffer.getGraphics(); 58 59 // Register the applet to listen for ALL mouse events: 60 addMouseListener( this ); 61 addMouseMotionListener( this ); 62 63 } // end method init() 64 65 // Override java.awt.Component.update: 66 public void update( Graphics g ) { 67 // Fill background: 68 gOffScreen.setColor( getBackground() ); 69 gOffScreen.fillRect( 1, 1, getSize().width - 2, getSize().height - 2 ); 70 // Draw boundary: 71 gOffScreen.setColor( getForeground() ); 72 gOffScreen.drawRect( 0, 0, getSize().width - 1, getSize().height - 1 ); 73 paint( gOffScreen ); 74 75 // Draw the buffer in the applet window: 76 g.drawImage( buffer, 0, 0, this ); 77 } 78 79 // Override java.awt.Component.paint: 80 public void paint( Graphics g ) { 81 // Paint each object: 82 for ( int i = 0; i < numObj; i++ ) { 83 object[i].paint(g); 84 } 85 } 86 87 // MouseMotionListener event handlers: 88 public void mouseMoved( MouseEvent e ) { 89 hit = -1; 90 for ( int i = 0; i < numObj; i++ ) { 91 if ( object[i].contains( e.getX(), e.getY() ) ) { 92 hit = i; break; 93 } 94 } 95 96 for ( int i = 0; i < numObj; i++ ) { 97 object[i].setColor( (i == hit) ? objColorSelect : objColor ); 98 } 99 repaint(); 100 } 101 public void mouseDragged( MouseEvent e ) { 102 if ( current != -1 ) { 103 int x = e.getX() + xoffset; 104 int y = e.getY() + yoffset; 105 object[current].setLocation( x, y ); 106 repaint(); 107 } 108 } 109 110 // MouseListener event handlers: 111 public void mousePressed( MouseEvent e ) { 112 current = hit; 113 if ( current != -1 ) { 114 xoffset = object[current].getX() - e.getX(); 115 yoffset = object[current].getY() - e.getY(); 116 } 117 } 118 public void mouseReleased( MouseEvent e ) { 119 current = -1; 120 } 121 public void mouseClicked( MouseEvent e ) { } 122 public void mouseEntered( MouseEvent e ) { } 123 public void mouseExited( MouseEvent e ) { } 124 125 } // end class MouseEvents 126