请问怎么判断鼠标拖动时,是向上还是向下拖动?

解决方案 »

  1.   

    保存移动到该处前的mouseY坐标,与当前的mouseY比较.
      

  2.   

    class M extends MouseMotionAdapter{
        private lastY = -1;
        public void mouseDragged(MouseEvent e){
           int y = e.getY();
           if(lastY != -1){
              System.out.println((y > lastY ? "Up" : "Down") + " to (" + e.getX() + ", " + y + ")");
           }
           lastY = y;
        }
    }
      

  3.   

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Event;
    import java.applet.Applet;
     
    public class MouseMove extends Applet  {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    final int MaxLines = 20;
    int CurrentLines = 0;
    Point LineStarts[] = new Point[MaxLines];
    Point LineEnds[] = new Point[MaxLines];
    Point StartPoint, CurrentPoint;
    String CurrentMessage = "";
     
        // 按下鼠标按键时会被调用的方法
    public boolean mouseDown(Event evt, int x, int y)   {
            if (CurrentLines < MaxLines)    {
    StartPoint = new Point(x, y);
    CurrentPoint = new Point(x, y);
    CurrentMessage = "线段: (" + x + ", " + y + ")"
                                    + " – (" + x + ", "+ y + ")";
    System.out.println("线段开始位置: (" + x + ", " + y + ")");
    repaint();
            }
            else
    System.out.println("太多线段了... ");
            return true;
    }
     
    // 放开鼠标按键时会被调用的方法
    public boolean mouseUp(Event evt, int x, int y)   {
            if (CurrentLines < MaxLines)    {
    CurrentPoint = new Point(x, y);
    LineStarts[CurrentLines] = StartPoint;
    LineEnds[CurrentLines ++] = CurrentPoint;
    System.out.println("线段结束位置: (" + x + ", " + y + ")");
    StartPoint = null;
    CurrentPoint = null;
    repaint();
            }
            return true;
    }
     
    // 移动鼠标指标时, 会被调用的方法 (鼠标按键被按下的状态)
    public boolean mouseDrag(Event evt, int x, int y)   {
            if (CurrentLines < MaxLines)    {
    CurrentPoint = new Point(x, y);
    CurrentMessage = "线段: ("+ StartPoint.x + ", "
                    + StartPoint.y + ")" + " – (" + x + ", " + y + ")";
    repaint();
            }
            return true;
    }
     
    // 移动鼠标指标时, 会被调用的方法 (鼠标按键没有被按下的状态)
    public boolean mouseMove(Event evt, int x, int y)   {
            CurrentMessage = "你把鼠标移到 (" + x + ", " + y + ") 了";
            repaint();
            return true;
    }
     
    public void paint(Graphics g)   {
            int I;
            g.setColor(Color.BLUE);
            // 印出现在的讯息
            g.drawString(CurrentMessage, 5, 15);
            // 画出线段
            for (I = 0;I < CurrentLines;I ++)
    g.drawLine(LineStarts[I].x, LineStarts[I].y,
                    LineEnds[I].x, LineEnds[I].y);
            // 现在正在拖曳的线段
            if (StartPoint != null)
    g.drawLine(StartPoint.x, StartPoint.y,
                    CurrentPoint.x, CurrentPoint.y);
    }
    }