如何使用计时器和延迟更新JavaSwingGUI?

如何使用计时器和延迟更新JavaSwingGUI?,java,swing,sorting,user-interface,timer,Java,Swing,Sorting,User Interface,Timer,我正在尝试使用JavaGUI制作一个排序可视化工具。我面临的问题是实时更新GUI。例如,当我洗牌初始数组时,我将调用以下洗牌和交换方法。我希望它重新绘制GUI,然后在延迟后再次绘制,但它所做的只是完成ShufferRay方法,然后立即重新绘制,不显示“动画”。有什么更好的方法来解决这个问题 public void shuffleArray() { final int milliDelay = 1000; for (int i = NUM_BARS - 1;

我正在尝试使用JavaGUI制作一个排序可视化工具。我面临的问题是实时更新GUI。例如,当我洗牌初始数组时,我将调用以下洗牌和交换方法。我希望它重新绘制GUI,然后在延迟后再次绘制,但它所做的只是完成ShufferRay方法,然后立即重新绘制,不显示“动画”。有什么更好的方法来解决这个问题

   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();
    }

. 考虑提供A,它将提供更好的上下文和吸引更多的帮助建议,关于如何解决您的特定问题,因此,立即,它们是一些问题。您的
shufflearlay
正在调用
swap
,这将创建n个
计时器。这样做的问题是,它们很可能都会在彼此间隔很短的时间内被调用,从而产生一个更新的结果,看起来就像跳转到最终结果一样。相反您需要一个单独的
计时器
,它自己执行排序的每个步骤,也就是说,每次调用它时,它都将执行交换。
计时器将充当伪循环