2015-04-04 2 views
1

three circlesява drawOval повторяющиеся круги

Когда перерисовки круги, окно не очищается; новые круги добавляются в существующий контент.

Целью является создание трех кругов, по одному для каждого цвета.

Поток вызывает функцию перемещения, которая рисует круги с разными радиусами.

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(); 
} 
+0

Что такое 'box'? Какой графический интерфейс вы используете? В вашем вопросе отсутствует контекст. – RealSkeptic

ответ

2

Прежде всего, ваш подход не рекомендуется. Но если вам нужно только быстрое и грязное исправление, вы должны очистить панель перед рисованием кругов.

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

Спасибо человеку. В этой строке все изменилось – Murad

+0

Рад помочь. Но я действительно рекомендую следовать рекомендации Camickr: просто обновите свои значения в своем методе и сделайте весь рисунок в 'paintComponent'. –

0
Graphics g = box.getGraphics(); 

No. Не используйте GetGraphics(). Любая картина, выполненная с помощью этого объекта Graphics, является временным и будет удалена в любое время, когда Swing определяет, что компонент должен быть перекрашен.

Для пользовательских картины переопределить метод GetPreferredSize() из в JPanel:

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

    // add your custom painting here 
} 

Кроме того, не забудьте переопределить getPreferredSize() метод панели. Прочтите раздел из руководства Swing по телефону Custom Painting для получения дополнительной информации.