你可以写一个Line类来表示这个线段
public class Line{
//保存相对位置,所以只要设其终点
private int endX;
private int endY;
...
}然后在画图的容器里用数组或者List保存图形
并保存一个当前活动的图形(就是你想跟着鼠标动的这个图形,如果是多个,就用List或者数组表示)
然后就是这个容器相应鼠标的move事件了,实现这个事件监听器就可以了
实现MouseMotionListener接口来监听MouseMotion事件
实现mouseMoved()方法
component.addMouseMotionListener(new MouseMotionAdapter(){
  public void mouseDragged(MouseEvent e){}
  public void mouseMoved(MouseEvent e){
    Point p=e.getPoint();
    //利用这个点重绘画面
  }
});

解决方案 »

  1.   

    我已经开始有点晕了!~本来我有一个还可以画线的程序但是不知道怎么样结合到AWT界面加上我刚上问的问题啊~这是我一个作业来的~还得实现画圆画方呢?其中的画圆画方我都可以单独用实现~怎么做到结合起来啊~
    这是我其中一个画直线的程序啊
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Event;
    import java.applet.Applet;public class DrawLine extends Applet  {
        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.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);
        }
    }
      

  2.   

    那怎么去实现有复选框的样子可以选中一个方式就画直线,圆等呢?我理你的意思是用移动容器来实现移动功能~但现在还一个问题是把这三个画法集在一起在一个界面有没有QQ可以给我这样好像说不明白啊~
    我的QQ是99198044 希望chanceqw() LemonHunter(太阳花) 能加一下我啊~帮我一下啊~
    或在此给点例子我啊好吗?我已经头都大了