我无法在For循环(JavaFX)中设置按钮文本

问题描述 投票:0回答:1

我陷入了这个问题。我必须可视化Java中的选择排序算法,因此决定将JavaFX用于UI。在我的代码中,我有数字数组和按钮数组。我使用按钮来逐步查看数字数组的输出。但是,只有在所有循环过程结束时,我才会获得输出结果。我想这样做,例如: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();

}
java swing for-loop javafx
1个回答
0
投票

但是我只有在所有循环过程结束时才得到输出结果

这是因为您在run()上调用了Thread,因此它实际上并未创建新线程。相反,它在主UI线程上运行,并且永远不允许UI更新。

我认为多线程不是您要执行的操作的好解决方案,因为您将不得不弄清楚如何与UI线程进行通信以告诉它进行更新。多年前,当我在Swing中做类似的事情时,我在排序算法中使用了回调来通知UI更新。

© www.soinside.com 2019 - 2024. All rights reserved.