【问题标题】:java scenebuilder bmi calculatorjava scenebuilder bmi计算器
【发布时间】:2019-02-18 13:27:53
【问题描述】:

所以我一直在从事 javaFX 和 Scenebuilder 项目以创建 BMI 计算器,但似乎有点卡住了。关于我应该做什么的任何提示/建议?

其中一个要求是要有两个交互式类以及控制器、fxml 页面和应用程序启动器。第一类用于将英寸转换为厘米,将磅转换为千克,然后在第二类中用于计算bmi值和状态。

public class BMIInput {

private double heightIN;
private double heightCM;
private double weightKG;
private double weightLBS;
public double height;
public double weight;

public BMIInput() {
}

public double getHeight() {
    if (heightIN == 0) {
        height = heightCM;
    } else if (heightCM == 0) {
        height = (heightIN * 2.54);
    }
    return height;
}

public double getWeight() {
    if (weightLBS == 0) {
        weight = weightKG;
    } else if (weightKG == 0) {
        weight = (weightLBS / 2.205);
    }
    return weight;
}

public double setHeightIN(double height) {
    return this.heightIN = height;
}

public double setHeightCM(double height) {
    return this.heightCM = height;
}

public double setWeightKG(double weight) {
    return this.weightKG = weight;
}

public double setWeightLBS(double weight) {
    return this.weightLBS = weight;
}

}

二等:

public class BMICalculator {

BMIInput height;
BMIInput weight;
double bmiValue;

public double getBmiValue() {
    return bmiValue;
}

public void setBmiValue(double bmiValue) {
    this.bmiValue = bmiValue;
}

public double calculateBMI() {
    double heightDouble = Double.parseDouble(height.toString());
    double weightDouble = Double.parseDouble(weight.toString());

    bmiValue = (weightDouble / (heightDouble / 100.0) * (heightDouble / 100));

    return bmiValue;
}    

public String calculateStatus() {
    String value = "";
    if (bmiValue <= 18.5) {
        value = "Underweight";
    } else if (18.6 <= bmiValue && bmiValue <= 24.9) {
        value = "Normal weight";
    } else if (25 <= bmiValue && bmiValue <= 29.9) {
        value = "Overweight";
    } else {
        value = "Obesity";
    }
    return value;
}

和控制器:

import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TextField; public class AppController {

@FXML private TextField CMheightInput;
@FXML private TextField INheightInput;
@FXML private TextField KGweightInput;
@FXML private TextField LBSweightInput;
@FXML private Button buttonCalculate;
@FXML private TextField bmiValueOutput;
@FXML private TextField bmiStatusOutput;



BMICalculator calc = new BMICalculator();
BMIInput input = new BMIInput();

@FXML public void calculateBMI() {
    try {
        input.setHeightCM(Double.parseDouble(CMheightInput.getText()));
        input.setHeightIN(Double.parseDouble(INheightInput.getText()));
        input.setWeightKG(Double.parseDouble(KGweightInput.getText()));
        input.setWeightLBS(Double.parseDouble(LBSweightInput.getText()));

        bmiValueOutput.setText("" + calc.calculateBMI());

        bmiStatusOutput.setText("" + calc.calculateStatus());
    }
    catch (Exception e) {
        System.out.println("Something went wrong, try again.");
    }
}

如果有人有任何指点,我将非常感激! XX

【问题讨论】:

  • 你能告诉我为什么你命名一个负责转换BMIInput的类吗?这并不能反映课程的作用......顺便说一下,您的问题到底是什么?
  • 我们必须至少有两个类与交互代码,所以我认为让 BMIInput 将英寸和磅转换为厘米和公斤是合乎逻辑的,因为你只有厘米或英寸(而不是同时),我可以使用 if 语句创建一个新的高度变量,可以在 BMICalculator 中使用它来计算实际的 BMI 值。问题是代码符合但当我输入时没有任何反应Scenebuilder 中的值。
  • SceneBuilder 只是一个创建 GUI 的工具,你不能在其中有任何逻辑。你到底想做什么?你不能开始用纯 Java 实现逻辑,测试它然后创建一个 GUI 吗?
  • 我先用逻辑创建了类,但我在 Scenebuilder 中没有任何逻辑 - 控制器将类与 fxml 页面连接起来,我只调用类来做计算。我一直试图弄清楚我在连接 GUI 和代码时是否犯了任何错误,因为每次运行它时,我只会抛出异常。不过,我会尝试回到忽略 GUI 并查看代码本身是否正常 - 谢谢
  • 请发布Exception及其(完整)堆栈跟踪。

标签: java class controller scenebuilder


【解决方案1】:

您可能没有引用变量的实例...您的 Main 方法在哪里启动程序?您必须在 Java 文件中加载 FXMLController 及其资源。尝试观看有关如何将简单的 JavaFX 程序与 SceneBuilder 一起使用的 YouTube 视频。我喜欢的一个是:How to use SceneBuilder

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多