Nex*_*o16 -1 java javafx textfield java-12
我是Java(和一般编程)的新手,正在通过将基本电子表格转换为javafx应用程序来学习。为此,我正在使用:Java和JavaFX 12 FXML和Scenebuilder for GUI
大约有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
}
}
Run Code Online (Sandbox Code Playgroud)
您需要一种或另一种方式将一个字段与一个字符串关联。这需要你添加一些代码对于每个的TextField
S,不管是设置userData
在FXML或存储的compination TextField
和String
在控制器的一个合适的数据结构initialize
的方法。
这样的数据结构可能是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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34 次 |
最近记录: |