Можно ли перекрасить сцену / оживить добавление новых баров на сцену во время выполнения? Я пытаюсь создать визуализатор сортировки с использованием JavaFX.
Это фрагмент моего кода, в котором я создаю столбики со случайной высотой и рисую их на экране.
Моя проблема в том, что все бары рисуют сразу, и я хочу, чтобы они красились последовательно.
Я возился с засыпанием нити, но обнаружил, что это не работает. Я думаю, что мне, возможно, придется пойти на использование какой-то анимации.
Я был бы признателен, если бы кто-то мог привести меня в правильном направлении.
public class View extends BorderPane{
public static final double WINDOW_HEIGHT = Util.screenHeight();
public static final double WINDOW_WIDTH = Util.screenWidth();
private Button button;
private ArrayList<String> sortingMethodsList;
private HBox buttonRow;
private HBox randomNodeRow;
private Rectangle rectangle;
public View()
{
runProgram();
}
void runProgram() {
this.sortingMethodsList = new ArrayList<String>();
sortingMethodsList.add("Shuffle");
sortingMethodsList.add("Quick Sort");
sortingMethodsList.add("Merge Sort");
this.buttonRow = new HBox();
this.randomNodeRow = new HBox();
buttonRow.setAlignment(Pos.BOTTOM_CENTER);
randomNodeRow.setAlignment(Pos.TOP_CENTER);
this.setBottom(buttonRow);
this.setTop(randomNodeRow);
//dynamically add new buttons
for(String s : sortingMethodsList)
{
this.button = new Button(s);
buttonRow.getChildren().add(button);
}
//add spacing between each button
for (Node b : buttonRow.getChildren())
{
HBox.setMargin(b, new Insets(0, 5, 5, 5));
}
Button but = (Button) buttonRow.getChildren().get(0);
but.setOnAction(e -> {
runProgram();
});
//looping throw ArrayList of random numbers and assigning that to height of bar
for(Integer n: Util.randomIntsList())
{
//creating bar
this.rectangle = new Rectangle(100,100,14,n);
rectangle.setStroke(Color.BLACK);
rectangle.setFill(Color.CORAL);
rectangle.setStrokeWidth(0.5);
//adding bar to the row
randomNodeRow.getChildren().add(rectangle);
//setting margins between bars
HBox.setMargin(rectangle, new Insets(1,0.5,0,0.5));
}
}
}
Это это то, что программа генерирует до сих пор.