回 帖 发 新 帖 刷新版面

主题:绘制曲线

拖动鼠标,根据鼠标轨迹画一条曲线,就像window xp中画图板那样。

回复列表 (共3个回复)

沙发

调用鼠标事件  捕捉鼠标位置(如getLocationOnScreen()之类的)  画线

主要就是利用MouseEvent

可查看JDK文档

板凳

可否提供一些代码

3 楼

if(line)//画直线
    { if(pressed&&dragged) 
      { g.setColor(frocolor);
          g.drawLine(begin.x,begin.y,move.x,move.y);
        g.setColor(bacolor);
        g.drawLine(begin.x,begin.y,cover.x,cover.y);
        cover.x=move.x;
        cover.y=move.y;
      }
     
      if(pressed&&released) 
      { g.setColor(frocolor);
          g.drawLine(begin.x,begin.y,end.x,end.y);
        released=false;
        dragged=false;
      }
      start=false;
    }
    
    if(rec)//画矩形
    { //g.setColor(frocolor);
      if(pressed&&dragged)
      { //g.setColor(frocolor);
          //g.drawRect(Math.min(begin.x,move.x),Math.min(begin.y,move.y),Math.abs(begin.x-move.x),Math.abs(begin.y-move.y));
        g.setColor(bacolor);
        g.drawRect(cover.x,cover.y,cow,coh);
        cover.x=Math.min(begin.x,move.x);
        cover.y=Math.min(begin.y,move.y);
        cow=Math.abs(begin.x-move.x);
        coh=Math.abs(begin.y-move.y);
        g.setColor(frocolor);
          g.drawRect(Math.min(begin.x,move.x),Math.min(begin.y,move.y),Math.abs(begin.x-move.x),Math.abs(begin.y-move.y));
          dragged=false;
      }
      if(pressed&&released) 
      { g.drawRect(Math.min(begin.x,end.x),Math.min(begin.y,end.y),Math.abs(begin.x-end.x),Math.abs(begin.y-end.y));
        released=false;
        dragged=false;
      }
      start=false;
    }
    
    if(cir)//画圆
    { 
      if(pressed&&dragged)
      { g.setColor(frocolor);
          int r=(int)Math.sqrt((double)((begin.x-move.x)*(begin.x-move.x)+(begin.y-move.y)*(begin.y-move.y)));
          g.drawOval((begin.x-r),(begin.y-r),2*r,2*r);
          g.setColor(bacolor);
          g.drawOval(cover.x,cover.y,cor,cor);
          cover.x=begin.x-r;
          cover.y=begin.y-r;
          cor=2*r;
      }
      if(pressed&&released) 
      { g.setColor(frocolor);
        int r=(int)Math.sqrt((double)((begin.x-end.x)*(begin.x-end.x)+(begin.y-end.y)*(begin.y-end.y)));
          g.drawOval((begin.x-r),(begin.y-r),2*r,2*r);
        released=false;
        dragged=false;
      }
      start=false;
    }

我来回复

您尚未登录,请登录后再回复。点此登录或注册