java drawOval重复的圆圈

时间:2015-04-04 16:59:59

标签: java

three circles

重绘圆圈时,窗口不会被清除;新圈子会添加到现有内容中。

目标是创建三个圆圈,每种颜色一个圆圈。

线程调用移动函数,该函数绘制具有不同半径的圆。

public void run() {
    try {
          while(true){
              box.removeAll();
              move();
              box.removeAll();
              sleep(500);
          }
    } catch (InterruptedException e) {
    }
}

public synchronized void move() {
    Graphics g = box.getGraphics();
    g.setXORMode(box.getBackground());

    x1= one.x + ofset;
    y1= one.y + ofset;

    System.out.println("My Point ("+ x1 + " , " + y1 +")" );

    g.setColor(Color.green);
    g.drawOval(pointA.x-(int)distance1, pointA.y-(int)distance1, (int)distance1*2, (int)distance1*2);

    g.setColor(Color.blue);
    g.drawOval(pointB.x-(int)distance2, pointB.y-(int)distance2, (int)distance2*2, (int)distance2*2);

    g.setColor(Color.red);
    g.drawOval(pointC.x-(int)distance3, pointC.y-(int)distance3, (int)distance3*2, (int)distance3*2);

    g.dispose();
}

2 个答案:

答案 0 :(得分:2)

首先,不推荐您的方法。但是,如果您只需要快速而肮脏的修复,则必须在绘制圆圈之前清除面板。

Graphics g = box.getGraphics();
g.clearRect(0, 0, box.getWidth(), box.getHeight()); // this should do it
g.setXORMode(box.getBackground());

答案 1 :(得分:0)

Graphics g = box.getGraphics();

没有。不要使用getGraphics()。使用该Graphics对象进行的任何绘制都只是临时的,并且会在Swing确定需要重新绘制组件时随时删除。

对于自定义绘制,覆盖JPanel的getPreferredSize()方法:

@Override
protected void paintComponent(Graphics g)
{
    super.paintComponent(g); // clears the background

    // add your custom painting here
}

另外,不要忘记覆盖面板的getPreferredSize()方法。有关详细信息,请阅读Custom Painting上的Swing教程中的部分。