Метод paintComponent
обновит ваши круги, если они как-то изменились. Это не то место, где можно сделать эти изменения самостоятельно. Поэтому код во втором цикле должен быть перемещен в другое место, например, в конструктор Circle
и / или в метод moveCircle
. paintComponent
будет вызываться системой после внесения этих изменений. Кроме того, что касается первого цикла, не ясно, каким будет selectedCircle
, вероятно, переменная экземпляра. Если это так, не закрашивайте его внутри петли, а только один раз.
Вы можете переместить объявление dist
за пределы вашего метода в тело класса, а затем предоставить метод получения доступа для вашего другого класса.
private double dist;
public double getDist() {
return dist;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (Circle circle : circles) {
circle.draw(g);
if (selectedCircle != null && selectedCircle == circle) {
selectedCircle.drawSelected(g);
}
}
for (int i = 0; i < circles.size(); i++) {
Circle c1 = circles.get(i);
for (int j = i + 1; j < circles.size(); j++) {
Circle c2 = circles.get(j);
dist = c1.getPoint().distance(c2.getPoint()) + 1;
double dx = (c2.x - c1.x) / dist / dist;
double dy = (c2.y - c1.y) / dist / dist;
c1.x += dx;
c1.y += dy;
c2.x -= dx;
c2.y -= dy;
}
}
}