有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在javafx应用程序中有没有替代堆叠if的方法来检查许多空白字段?

我对java(以及一般的编程)不熟悉,正在通过将基本电子表格转换为javafx应用程序来学习。 为此,我使用: 爪哇;JavaFX12 FXML&;用于GUI的scenebuilder

大约有10个输入字段,它们不能为空(应用程序崩溃,因为getText似乎在空白字段上失败)

我已经编写了堆叠的if语句来检查空白字段,然后打印一条错误消息,如果是这样的话,返回可以停止进程,而不会导致应用程序崩溃

Switch语句似乎并不比if语句更好

有没有一种方法可以减少代码行数

package SteelDesign_BoltedConnection;

import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextArea;
import javafx.event.ActionEvent;

public class mainController {

    //Header details
    @FXML   private TextField refNo;
    @FXML   private TextField jobDesc;
    @FXML   private TextField author;
    @FXML   private DatePicker date;

    //Design data
    @FXML   private TextField desShear;
    @FXML   private TextField boltSize;
    @FXML   private TextField boltGrade;
    @FXML   private TextField tensStrengthBolt;
    @FXML   private TextField noBolts;
    @FXML   private TextField shearPlanes;
    @FXML   private TextField edgeDist;
    @FXML   private TextField plyThick;
    @FXML   private TextField tensStrengthPly;

    //Constants
    @FXML   private TextField phiBolt;
    @FXML   private TextField phiPly;

    //Results - Bolt Shear
    @FXML   private TextField boltDesShear;
    @FXML   private TextField boltCap;
    @FXML   private TextField loadFactorBolt;

    //Results - Ply Shear & Bearing
    @FXML   private TextField plyDesShear;
    @FXML   private TextField plyCap;
    @FXML   private TextField loadFactorPly;

    //Output messages
    @FXML   private TextArea outputMsg;

    public void run(ActionEvent clickRun) {

        String outputMSG;

        //Check fields are populated
        if(desShear.getText().isBlank()) {
            outputMSG = "Design shear field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(boltSize.getText().isBlank()) {
            outputMSG = "Bolt size field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(tensStrengthBolt.getText().isBlank()) {
            outputMSG = "Bolt strength field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(noBolts.getText().isBlank()) {
            outputMSG = "Number of bolts field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(shearPlanes.getText().isBlank()) {
            outputMSG = "Number of shear planes field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(edgeDist.getText().isBlank()) {
            outputMSG = "Edge distance field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(plyThick.getText().isBlank()) {
            outputMSG = "Ply thickness field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(tensStrengthPly.getText().isBlank()) {
            outputMSG = "Ply strength field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(phiBolt.getText().isBlank()) {
            outputMSG = "Bolt phi factor field is blank";
            outputMsg.setText(outputMSG);
            return;
        }
        else if(phiPly.getText().isBlank()) {
            outputMSG = "Ply phi factor field is blank";
            outputMsg.setText(outputMSG);
            return;
        }

        //Get field values
        double desSHEAR = Double.parseDouble(desShear.getText());
        double boltSIZE = Double.parseDouble(boltSize.getText());
        double tensStengthBOLT = Double.parseDouble(tensStrengthBolt.getText());
        double noBOLTS = Double.parseDouble(noBolts.getText());
        double shearPLANES = Double.parseDouble(shearPlanes.getText());
        double edgeDIST = Double.parseDouble(edgeDist.getText());
        double plyTHICK = Double.parseDouble(plyThick.getText());
        double tensStrengthPLY = Double.parseDouble(tensStrengthPly.getText());
        double phiBOLT = Double.parseDouble(phiBolt.getText());
        double phiPLY = Double.parseDouble(phiPly.getText());

        //Bolt shear calculation


        }

}

共 (1) 个答案

  1. # 1 楼答案

    无论如何,您需要将一个字段与一个字符串相关联。这需要为每个TextField添加一些代码,无论是在fxml中设置userData,还是在控制器的initialize方法的适当数据结构中存储TextFieldString的组合

    这种数据结构可以是LinkedHashMap

    private final Map<TextField, String> fieldStrings = new LinkedHashMap<>();
    
    @FXML
    private void initialize() {
        fieldStrings.put(desShear, "Design shear");
        fieldStrings.put(boltSize, "Bolt size");
        fieldStrings.put(tensStrengthBolt, "Bolt strength");
        fieldStrings.put(noBolts, "Number of bolts");
        fieldStrings.put(shearPlanes, "Number of shear planes");
        fieldStrings.put(edgeDist, "Edge distance");
        fieldStrings.put(plyThick, "Ply thickness");
        fieldStrings.put(tensStrengthPly, "Ply strength");
        fieldStrings.put(phiBolt, "Bolt phi factor");
        fieldStrings.put(phiPly, "Ply phi factor");
    }
    
    private double getFieldValue(TextField field) {
        return Double.parseDouble(field.getText());
    }
    
    public void run(ActionEvent clickRun) {
    
        String errorField = fieldStrings.entrySet().stream()
                                         .filter(entry -> entry.getKey().getText().isBlank())
                                         .map(Map.Entry::getValue)
                                         .findFirst().orElse(null);
    
        if (errorField != null) {
            outputMsg.setText(errorField + " field is blank");
            return;
        }
    
        //Get field values
        double desSHEAR = getFieldValue(desShear);
        double boltSIZE = getFieldValue(boltSize);
        double tensStengthBOLT = getFieldValue(tensStrengthBolt);
        double noBOLTS = getFieldValue(noBolts);
        double shearPLANES = getFieldValue(shearPlanes);
        double edgeDIST = getFieldValue(edgeDist);
        double plyTHICK = getFieldValue(plyThick);
        double tensStrengthPLY = getFieldValue(tensStrengthPly);
        double phiBOLT = getFieldValue(phiBolt);
        double phiPLY = getFieldValue(phiPly);
    
    
        //Bolt shear calculation
    
    
    }