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  }