如何使用计时器和延迟更新JavaSwingGUI?
我正在尝试使用JavaGUI制作一个排序可视化工具。我面临的问题是实时更新GUI。例如,当我洗牌初始数组时,我将调用以下洗牌和交换方法。我希望它重新绘制GUI,然后在延迟后再次绘制,但它所做的只是完成ShufferRay方法,然后立即重新绘制,不显示“动画”。有什么更好的方法来解决这个问题如何使用计时器和延迟更新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;
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个计时器。这样做的问题是,它们很可能都会在彼此间隔很短的时间内被调用,从而产生一个更新的结果,看起来就像跳转到最终结果一样。相反您需要一个单独的计时器
,它自己执行排序的每个步骤,也就是说,每次调用它时,它都将执行交换。计时器将充当伪循环