如果在同一个canvas里面职能是擦掉重画

解决方案 »

  1.   

    跟踪鼠标位置,然后重画就是了
    监听mouseMove事件,重画用得到Component的Graphics然后直接绘制的方式
      

  2.   

    根本就没有多个。不是闪烁。
    插如JPanel也不行,到底怎么做》》???
      

  3.   

    自定义一个组件,如:
    class MyCircle extends JPanel{
      //其它代码
      //重画组件
      void paint(Graphincs g){
        //画圆
      }
    }
    将这个组件加入(设窗口类名为 MyFrame):
    MyCircle circle = new MyCircle();
    this.getRootPane().add(circle);
    this.getRootPane().setLayout(null);//将布局管理器设为空,具体的方法名忘了
    circle.addMouseMotionListener(new MyMouseMotionListener(this));
    ...
    class MyMouseMotionListener implements java.awt.MouseMotionListener{
      MyFrame adapter;
      MyMouseMotionListener(MyFrame a){
        this.adapter = a;
      }
      //实现其它抽象方法: mouseDragged(java.awt.MouseEvent)
      //当鼠标移动
      void mouseMoved(java.awt.MouseEvent e){
        //设置“圆”组件的位置
        a.circle.setLocation(e.getX(), e.getY());
      }
    }
    思路就是这样,以上代码的实现可能有不正确,但也只限于拼写方面。
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.geom.Ellipse2D;
    public class ne extends JFrame {
      public ne() {
        MyCircle circle = new MyCircle();
        getRootPane().add(circle);
        getRootPane().setLayout(null);
        setBounds(100,100,600,400);
        show();
      }  class MyCircle extends JPanel {
        public void paint(Graphics g) {
          Graphics2D g2D = (Graphics2D)g;
          g2D.setPaint(Color.red);
          g2D.draw(new Ellipse2D.Float(100.f, 100.f, 30.f, 30.f));
        }
      }
      public static void main(String[] args){
        new ne();
      }
    }我照你的改了一下,去掉监听,可什么都没有,空的,你再看看..
      

  5.   

    在java中每画的一个图形都可以作为一个对象,改变对象位置就行了