Как обновить Java Swing GUI с помощью таймера и задержки? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь создать сортировочный визуализатор, используя Java GUI. Проблема, с которой я сталкиваюсь, заключается в обновлении GUI в режиме реального времени. Например, когда я перетасовываю исходный массив, я вызываю следующие методы shuffle и swap. Я ожидаю, что он перекрасит GUI, а затем сделает это снова с задержкой, но вместо этого все, что он делает, это fini sh, затем метод shuffleArray перерисовывает все сразу, без «анимации». Что может быть лучше?

   public void shuffleArray() {
        final int milliDelay = 1000;
        for (int i = NUM_BARS - 1; i >= 0; i--) {
            int rand = (int) (Math.random() * i);

            swap(i,rand, milliDelay);
        }
    }

    public void swap(int firstIndex, int secondIndex, int delay) {

        Timer timer = new Timer(delay, e -> {
            int temp = data[firstIndex];
            data[firstIndex] = data[secondIndex];
            data[secondIndex] = temp;

            barColors[firstIndex] = Color.RED;
            barColors[secondIndex] = Color.RED;

            repaint();

            barColors[firstIndex] = Color.WHITE;
            barColors[secondIndex] = Color.WHITE;
        });
        timer.setRepeats(false);
        timer.start();
    }
...