Я был так озадачен тем, как заставить это работать честно. Я согласен с Седриком проверить класс JavaFX Animation, но мне было скучно, поэтому я сделал эту работу, и определенно есть лучшие способы сделать это, но я приложил все усилия, чтобы попытатьсясохраняйте как можно больше кода, потому что вы хотели от этого отказаться.Просто посмотрел на это снова его p̶r̶e̶t̶t̶y̶ ̶m̶u̶c̶h̶ только имена переменных lol
public class Main extends Application {
private Circle circle;
private Circle circle1;
private Circle circle2;
private HashMap<Circle,Color> colorHashMap = new HashMap<>();
private HashMap<Circle,Integer> counterHashMap = new HashMap<>();
@Override
public void start(Stage stage) {
circle = new Circle(15, 15,30, Color.GREEN);
colorHashMap.put(circle,Color.GREEN);
counterHashMap.put(circle, 3);//Start On
circle1 = new Circle(15, 45,30, Color.GREY);
colorHashMap.put(circle1,Color.YELLOW);
counterHashMap.put(circle1, 2);
circle2 = new Circle(15, 60,30, Color.GREY);
colorHashMap.put(circle2,Color.RED);
counterHashMap.put(circle2, 1);
VBox vBox = new VBox();
vBox.getChildren().addAll(circle,circle1,circle2);
Scene scene = new Scene(vBox);
stage = new Stage();
stage.setScene(scene);
stage.show();
try {
startThreads();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void startThreads() throws InterruptedException {
new Thread(()->{
while (true) {
flipColor(circle);
flipColor(circle1);
flipColor(circle2);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
private void flipColor(Circle circle){
if(counterHashMap.get(circle)%3==0) {
Platform.runLater(()->circle.setFill(colorHashMap.get(circle)));
counterHashMap.put(circle,1);
}
else {
if(!circle.getFill().equals(Color.GREY))
Platform.runLater(()->circle.setFill(Color.GREY));
counterHashMap.put(circle,counterHashMap.get(circle)+1);
}
}
public static void main(String[] args) { launch(args); }
}