import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class MousePanel extends JPanel implements MouseListener
{  public MousePanel()
   {  addMouseListener(new MouseAdapter() 
         {  public void mousePressed(MouseEvent evt) 
            {  int x = evt.getX();
               int y = evt.getY();
               current = find(x, y);
               if (current < 0)
                  add(x, y);
            }
            public void mouseClicked(MouseEvent evt) 
            {  int x = evt.getX();
               int y = evt.getY();               if (__________)
               {  remove(current);
               }
            }
         });
      addMouseMotionListener(this);
   }
   public void paintComponent(Graphics g)
   {  super.paintComponent(g);
      for (int i = 0; i < nsquares; i++)
         draw(g, i);
   }   
   public int find(int x, int y)
   {  for (int i = 0; i < nsquares; i++)
         if (squares[i].x - SQUARELENGTH / 2 <= x && 
               x <= squares[i].x + SQUARELENGTH / 2 
               && squares[i].y - SQUARELENGTH / 2 <= y 
               && y <= squares[i].y + SQUARELENGTH / 2)
            return i;
      return -1;
   }
   public void draw(Graphics g, int i)
   {  g.drawRect(squares[i].x - SQUARELENGTH / 2, 
         squares[i].y - SQUARELENGTH / 2, 
         SQUARELENGTH, 
         SQUARELENGTH);
   }
   public void add(int x, int y)
   {  if (nsquares < MAXNSQUARES)
      {  squares[nsquares] = new Point(x, y);
         current = nsquares;
         nsquares++;
         repaint();
      }
   }
   public void remove(int n)
   {  if (n < 0 || n >= nsquares) return;
      nsquares--;
      squares[n] = squares[nsquares];
      if (current == n) current = -1;
      repaint();
   }
   public void mouseMoved(MouseEvent evt) 
   { }
   public void mouseDragged(MouseEvent evt) 
   {}
   private static final int SQUARELENGTH = 10;
   private static final int MAXNSQUARES = 100;
   private Point[] squares = new Point[MAXNSQUARES];
   private int nsquares = 0;
   private int current = -1;
}class MouseFrame extends JFrame
{  public MouseFrame()
   {  setTitle("exam_18");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );      Container contentPane = getContentPane();
      contentPane.add(new MousePanel());
   }
}public class exam_18
{  public static void main(String[] args)
   {  JFrame frame = new MouseFrame();
      frame.show();  
   }
}

解决方案 »

  1.   

    hehe,我来说一下,不知道对不对:)
    应该填find(x,y) >= 0,想要实现如下功能:
    key words:
    点击区域,在程序中就是以当前鼠标位置为中心,以SQUARELENGTH为边长的正方形。
    使用mousePresssed方法跟踪鼠标按键按下的动作,按下后,根据当前坐标判断所属的
    点击区域是不是已经记录,如果未记录就存入数组,再重画;
    使用mouseClicked方法跟踪鼠标按键释放的动作,如果释放,则根据当前坐标判断所属
    的点击区域是不是已经记录,如果记录就删除此区域,再重画;
    运行时,你就会发现这样的情况:鼠标按下,然后移过SQUARELENGTH/2的位置再释放,
    就会在面板上画出SQUARELENGTH见方的正方形;鼠标按下,没有移动到那么大位置就
    看不到正方形;对于已有的正方形,在区域内点击,会清掉这个正方形。
    不知道大家有没有别的想法:)
      

  2.   

    wuqihui() 应该正确率比较高
      

  3.   

    貌似CoreJava2 卷I 第295页的例子:moustTest.java
      

  4.   

    如 foxzj(总有一天比你牛) 所说...就这样看, 谁知道该填什么呀!! 不过zhangtieqi说的可能是对的