javafx标签不显示循环结果

标签 java javafx label

我创建了一个程序来逐步显示 2 个整数之间的 gcd(最大公约数)结果,而不仅仅是 java fx 中的最终结果

这是它的 Controller 类

package sample;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

import javafx.event.ActionEvent;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {
    int q, r1, r2, r3, r4, r;


    private Main main;
    private Stage primaryStage;


    public void setMain(Main main, Stage primaryStage) {
        this.main = main;
        this.primaryStage = primaryStage;
    }

    @FXML
    private Label label;
    @FXML
    private TextFlow tf;
    @FXML
    private TextArea ta;
    @FXML
    private Text t;
    @FXML
    private TextField field;
    @FXML
    private TextField field1;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        String t1 = field.getText();
        String t2 = field1.getText();
        if (t1.isEmpty() || t2.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.WARNING);
            alert.setTitle("Warning");
            alert.setHeaderText("Enter Values");
            alert.setContentText("you have to enter Integer Numbers");
            alert.showAndWait();

        } else {
            try {
                r1 = Integer.parseInt(t1);
                r2 = Integer.parseInt(t2);
                if (r1 < r2) {

                    r3 = r2;
                    r4 = r1;
                    r = r3 % r4;
                    q = r3 / r4;
                    String t = ("r1=" + r3 + "     " + "r2=" + r4 + "       " + "q=" + q + "      " + "r=" + r);
                    String t6 = new String();
                    while (r != 0) {


                        r3 = r4;
                        r4 = r;
                        r = r3 % r4;
                        q = r3 / r4;
                        t6 = "r1=" + r3 + "     " + "r2=" + r4 + "       " + "q=" + q + "      " + "r=" + r;
                        System.out.println(t6);

                    }
                    String t7 = ("gcd=" + r4);
                    label.setText(t + "\n" + t6 + "\n" + t7 + "\n");
                    label.setWrapText(true);
                } else {
                    r = r1 % r2;
                    q = r1 / r2;
                    String t3 = ("r1=" + r1 + "     " + "r2=" + r2 + "       " + "q=" + q + "      " + "r=" + r);
                    String t4 = new String();
                    //this part of code
                    while (r != 0) {


                        r1 = r2;
                        r2 = r;
                        r = r1 % r2;
                        q = r1 / r2;
                        t4 = ("r1=" + r1 + "     " + "r2=" + r2 + "       " + "q=" + q + "      " + "r=" + r);

                    }
                    String t5 = ("gcd=" + r2);
                    label.setText(t3 + "\n" + t4 + "\n" + t5 + "\n");



                }
            } catch (Exception e) {
                Alert alert = new Alert(Alert.AlertType.WARNING);
                alert.setTitle("Warning");
                alert.setHeaderText("Values Error");
                alert.setContentText("you can only enter Integer Numbers");
                alert.showAndWait();

            }
            field.clear();
            field1.clear();
        }

    }



    public void close(){
        primaryStage.close();
    }
    @Override
    public void initialize(URL url, ResourceBundle rb){}
    public void changeWindow(){
         main.secondWindow();
    }

}

现在这是我输入例如 26 15 时的结果 这是结果

r1=26     r2=15       q=1      r=11
r1=3     r2=1       q=3      r=0
gcd=1

但是结果应该像终端中显示的那样

r1=26     r2=15       q=1      r=11
r1=15     r2=11       q=1      r=4
r1=11     r2=4       q=2      r=3
r1=4     r2=3       q=1      r=1
r1=3     r2=1       q=3      r=0
1

正如我所说,为什么标签只显示循环的最终结果,而不是像终端那样显示整个循环

最佳答案

如果您想在Label中包含每个步骤,则需要在每次循环迭代的最终结果中添加一些内容。你不会做这样的事情。我建议使用 StringBuilder 来实现此目的:

if (r1 > r2) {
     int t = r1;
     r1 = r2;
     r2 = t;
}
StringBuilder sb = new StringBuilder();
while (r1 > 0) {
    int temp = r2 % r1;
    sb.append("r1=").append(r2).append("     r2=").append(r1).append("       q=").append(r2/r1).append("      r=").append(temp).append('\n');
    r2 = r1;
    r1 = temp;
}
sb.append("gcd=").append(r2);
label.setText(sb.toString());

关于javafx标签不显示循环结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290978/

相关文章:

R - 带有分组标签的 geom_bar 分组条形图

python - 根据Matplotlib中当前的ylim和xlim重新计算缩放后的x y值

html - 我的输入和标签不是内联的

java - 将 MP4 文件添加到 JPanel 并缩放它 - Java

java - 如何从 IP 范围中获取单独的连续 IP block ?

java - 如何在 mac 安装程序的 java 中更改安装程序的 java 默认图标

maven - 如何为 JavaFX 应用程序创建可执行的混淆 jar?

java - 使用 Junit 和 Mock put 请求进行测试

java - 在 Android/Java 中循环 JSONArray 时出现类型错误

Javafx TextField伪ClassStateChanged方法不起作用