(Сортировка визуализатора) Как вы рисуете / анимируете компоненты по одному? - PullRequest
0 голосов
/ 02 мая 2020

Можно ли перекрасить сцену / оживить добавление новых баров на сцену во время выполнения? Я пытаюсь создать визуализатор сортировки с использованием 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)); 
    }



}

}

Это это то, что программа генерирует до сих пор.

This is what the program produces so far

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...