java我无法在For循环(JavaFX)中设置按钮文本
我被这个问题难住了。我必须在Java中可视化选择排序算法,我决定在UI中使用JavaFX。在我的代码中,我有数字数组和按钮数组。我用按钮一步一步地查看数字数组的输出。但我只在所有循环过程结束时得到输出结果。我想这样做:https://algorithm-visualizer.org/brute-force/selection-sort
我搜索了一下,知道我必须使用线程,但我无法处理它。你能帮帮我吗
@FXML
private void btnTik(ActionEvent event){
Action action = new Action();
new Thread(){
public void run(){
for(int i = 0 ; i < nums.length ; i++){
min = i;
for(int j = i+1 ; j < nums.length ; j++){
if(nums[j] < nums[min]){
min = j;
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200); //Thead.sleep(200)
}
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200);
}
nums = action.Degistir(nums, i, min);
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200);
System.out.println(nums[i]+" ");
}
}
}.run();
}
# 1 楼答案
这是因为您在
Thread
上调用了run()
,所以它实际上不会创建新线程。相反,它在主UI线程上运行,从不允许UI更新我认为多线程并不是一个很好的解决方案,因为您必须弄清楚如何与UI线程通信以通知它进行更新。很多年前,当我在Swing中做类似的事情时,我在排序算法中使用回调来通知UI进行更新
# 2 楼答案
下面是交换一行中的
Label
数组中的两个Label
的mre。 JavaFx动画工具是适合这项工作的工具。此示例使用PauseTransition
: