1 /* 2 * EventTest Java Program Using XOR 3 */ 4 5 import java.applet.*; 6 import java.awt.*; 7 8 public class EventTest extends Applet { 9 int maxObj = 3; /* max object number */ 10 mPoint object[]; /* objecct array */ 11 int current = -1, hit = -1; 12 int xofs = 0, yofs = 0; 13 public void init() { 14 /* initial object array */ 15 setBackground(Color.black); 16 setForeground(Color.white); 17 object = new mPoint[maxObj]; 18 /* initial a rectangle */ 19 object[0] = new mRectangle(10, 10, 100, 100); 20 object[0].setColor(Color.red); 21 /* initial a circle */ 22 object[1] = new mCircle(200, 10, 100, 100); 23 object[1].setColor(Color.red); 24 /* initial a triangle */ 25 object[2] = new mTriangle(10, 200, 100, 100); 26 object[2].setColor(Color.red); 27 } 28 /* this method will be called to repond a disclosure */ 29 public void paint(Graphics g) { 30 /* we want to redraw the whole client area */ 31 g = getGraphics(); 32 /* fill background */ 33 g.setColor(getBackground()); 34 g.fillRect(1, 1, size().width-2, size().height-2); 35 /* draw boundry */ 36 g.setColor(getForeground()); 37 g.drawRect(0, 0, size().width-1, size().height-1); 38 /* draw objects */ 39 g.setXORMode(Color.black); 40 for (int i=0; i<maxObj; i++) 41 object[i].paint(g); 42 /* user who call getGraphics should call dispose */ 43 g.dispose(); 44 } 45 public void drawBoundry() { 46 Graphics g = getGraphics(); 47 /* draw boundry */ 48 g.setColor(getForeground()); 49 g.drawRect(0, 0, size().width-1, size().height-1); 50 g.dispose(); 51 } 52 /* Mouse Move Event */ 53 public boolean mouseMove(Event ev, int x, int y) { 54 int i; 55 hit = -1; 56 Graphics g = getGraphics(); 57 g.setXORMode(Color.black); 58 for (i=0; i<maxObj; i++) { 59 if ( object[i].isInside(x, y) ) { 60 hit = i; 61 break; 62 } 63 } 64 for (i=0; i<maxObj; i++) 65 object[i].setColor(g, (i==hit) ? Color.cyan : Color.red); 66 g.dispose(); 67 return true; 68 } 69 /* Mouse Down Event */ 70 public boolean mouseDown(Event ev, int x, int y) { 71 current = hit; 72 if ( current != -1 ) { 73 xofs = object[current].x-x; 74 yofs = object[current].y-y; 75 } 76 return true; 77 } 78 /* Mouse Drag Event */ 79 public boolean mouseDrag(Event ev, int x, int y) { 80 if ( current != -1 ) { 81 Graphics g = getGraphics(); 82 g.setXORMode(Color.black); 83 object[current].moveTo(g, x+xofs, y+yofs); 84 g.dispose(); 85 } 86 return true; 87 } 88 /* Mouse Up Event */ 89 public boolean mouseUp(Event ev, int x, int y) { 90 current = -1; 91 return true; 92 } 93 /* Mouse Enter Event */ 94 public boolean mouseEnter(Event ev, int x, int y) { 95 setForeground(Color.cyan); 96 drawBoundry(); 97 return true; 98 } 99 /* Mouse Exit Event */ 100 public boolean mouseExit(Event ev, int x, int y) { 101 setForeground(Color.red); 102 drawBoundry(); 103 return true; 104 } 105 /* KeyDown Event */ 106 public boolean keyDown(Event ev, int key) { 107 if ( hit == -1 ) return false; 108 int dx = 0, dy = 0; 109 switch ( key ) { 110 case Event.DOWN: 111 dy = 1; 112 break; 113 case Event.UP: 114 dy = -1; 115 break; 116 case Event.LEFT: 117 dx = -1; 118 break; 119 case Event.RIGHT: 120 dx = +1; 121 break; 122 } 123 if ((dx != 0) || (dy != 0)) { 124 Graphics g = getGraphics(); 125 g.setXORMode(Color.black); 126 object[hit].move(g, dx, dy); 127 g.dispose(); 128 } 129 return true; 130 } 131 }