要划线必须获得Graphics实例,必须是由paint(Graphics g)生成的Graphics,所以你的line()必须是在paint(Graphics g)方法体中完成,一旦从paint(Graphics g)返回则Graphics实例将不再存。public void paint(Graphics g){
    line(g);//调用line(),传递g,每次画线都是repaint()过程。
}public void line(Graphics g){
}

解决方案 »

  1.   

    我改了,但是在之前的
         line.addActionListener(new java.awt.event.ActionListener(){
             public void actionPerformed(ActionEvent e){
                 line();}
    line()出错:line(java.awt.Graphics)in Huaban cannot be applied to()什么意思?
      

  2.   

    要用Graphics产生的Graphics 实例。鼠标做标记了。
      

  3.   

    在鼠标事件mousePressed()事件记下当前鼠标的坐标:x1,y1
    在鼠标事件mouseDragged()事件里记下当前的鼠标坐标x2,y2,然后调用repaint()就可以了。
    因为repaint()可以自动调用paint(Graphics g)
      

  4.   

    这个我明白,只是不知道该怎么写code,尤其是怎么判断press是true,麻烦给一段例子
      

  5.   

    public void mousePressed(MouseEvent e)
       {
          x1=e.getX();   // 取得鼠标按下时的X坐标 (绘图起始点是X坐标)
          y1=e.getY();   // 取得鼠标按下时的Y坐标 (绘图起始点是Y坐标)
       }
       public void mouseDragged(MouseEvent e)
       {
          Graphics g=getGraphics(); 
          x2=e.getX();  // 取得鼠标拖拽时的X坐标
          y2=e.getY();  // 取得鼠标拖拽时的Y坐标
          g.drawLine(x1,y1,x2,y2);  // 绘出(x1,y1)到(x2,y2)的连线
          x1=x2;  // 更新绘图起始点的X坐标
          y1=y2;  // 更新绘图起始点的Y坐标 
      

  6.   

    谢谢,但是讲这个嵌入之前那个
    public void paint(Graphics g){
        line(g);//调用line(),传递g,每次画线都是repaint()过程。
    }public void line(Graphics g){  }
    中,不行啊,我真的不是很懂,尤其是这种情况
      

  7.   

    public void mousePressed(MouseEvent e){
          x1=e.getX();   // 取得鼠标按下时的X坐标 (绘图起始点是X坐标)
          y1=e.getY();   // 取得鼠标按下时的Y坐标 (绘图起始点是Y坐标)
       }
    public void mouseDragged(MouseEvent e){
          x2=e.getX();  // 取得鼠标拖拽时的X坐标
          y2=e.getY();  // 取得鼠标拖拽时的Y坐标
          repaint(); 

    public void mouseReleased(MouseEvent e){
         x2=e.getX();  // 取得鼠标拖拽时的X坐标
         y2=e.getY();  // 取得鼠标拖拽时的Y坐标
         repaint();

    public void paint(Graphics g){
         line(g);
    }
    public void line(Graphics g){
         g.drawLine(x1,y1,x2,y2);  // 绘出(x1,y1)到(x2,y2)的连线
    }
      

  8.   

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class Test extends JFrame{
    static final int LINE=0;
    static final int RECT=1;
    static final int OVAL=2;
    static final int ARC=3;
    static final Point INVALID=new Point(-1,-1);
    int status=LINE;
    Point start,pro,temp,end;
    boolean finished=false;
    JPanel dp=new JPanel(){
    public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.clearRect(0,0,getSize().width,getSize().height);
    Color oldColor=g.getColor();
    Point sp=null;
    if(finished && !start.equals(INVALID) && !start.equals(end)){

    switch( status){
    case LINE:
    g.drawLine(start.x,start.y,end.x,end.y);
    g.setColor(Color.red);
    g.drawLine(end.x-1,end.y,end.x+1,end.y);
    g.drawLine(end.x,end.y-1,end.x,end.y+1);
    g.drawLine(start.x-1,start.y,start.x+1,start.y);
    g.drawLine(start.x,start.y-1,start.x,start.y+1);
    g.setColor(oldColor);
    break;
    case RECT:
    sp=startPoint(start,end);
    g.drawRect(sp.x,sp.y,Math.abs(end.x-start.x),Math.abs(end.y-start.y));
    break;
    }
    }
    if(!finished && !start.equals(INVALID)){

    switch( status){
    case LINE:
    g.setColor(Color.red);
    g.drawLine(start.x-1,start.y,start.x+1,start.y);
    g.drawLine(start.x,start.y-1,start.x,start.y+1);

    if(!temp.equals(pro) && pro!=INVALID){
    if(!temp.equals(INVALID)){
    g.setColor(getBackground());
    g.drawLine(start.x,start.y,temp.x,temp.y);
    }
    g.setColor(Color.green);
    g.drawLine(start.x,start.y,pro.x,pro.y);
    temp=pro;
    } g.setColor(oldColor);
    break;
    case RECT:
    int x,y;


    if(!temp.equals(pro) && pro!=INVALID){
    g.setColor(getBackground());
    sp=startPoint(start,temp);
    g.drawRect(sp.x,sp.y,Math.abs(temp.x-start.x),Math.abs(temp.y-start.y)); g.setColor(Color.green);
    sp=startPoint(start,pro);
    g.drawRect(sp.x,sp.y,Math.abs(pro.x-start.x),Math.abs(pro.y-start.y));
    temp=pro;
    }
    g.setColor(oldColor);
    break;
    }
    } }
    };
    public Test(){
    super();
    JMenuBar bar=new JMenuBar();
    bar.add(buildShapeMenu());
    setJMenuBar(bar);

    getContentPane().add(dp,BorderLayout.CENTER);
    start=INVALID;
    pro=INVALID;
    temp=pro;
    dp.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
    finished=false;
    start=e.getPoint();
    repaint();
    }

    public void mouseReleased(MouseEvent e){
    finished=true;
    end=e.getPoint();
    repaint();

    } });
    dp.addMouseMotionListener(new MouseMotionAdapter(){
    public void mouseDragged(MouseEvent e){
    pro=e.getPoint();
    repaint(); }
    });
    setSize(400,300);
    show();
    }
    public JMenu buildShapeMenu() {
      
         JMenu file = new JMenu("Shape");     JMenuItem line = new JMenuItem("Line");
         JMenuItem rect= new JMenuItem("Rect");   
         JMenuItem oval = new JMenuItem("Oval");
         JMenuItem arc = new JMenuItem("Arc");
        
         file.add(line);
         file.add(rect);
         file.add(oval);      
         file.add(arc);
        
          line.addActionListener(new java.awt.event.ActionListener(){
              public void actionPerformed(ActionEvent e){
                  status=LINE;//line();    
              }
          });
         rect.addActionListener(new java.awt.event.ActionListener(){
              public void actionPerformed(ActionEvent e){
                  status=RECT;    
              }
          });
         return file;
        }

    public Point startPoint(Point p1,Point p2){
    int x,y;
    if(p2.x<p1.x)
    x=p2.x;
    else
    x=p1.x;
    if(p2.y<p1.y)
    y=p2.y;
    else
    y=p1.y;
    return new Point(x,y); }

    public static void main(String[] args){
    Test app=new Test();

    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }}
      

  9.   

    add your codes for oval and arc
      

  10.   

    画图对你来做的事情就只有repaint()