我写了这个方法,因为我想检查所有的地方,如果我按下按钮时textfields,datepicker和radiobuttons是空的,但它不起作用。
我应该在这段代码中纠正什么,或者我应该以不同的方式做一个方法?
public void btn1(ActionEvent event) throws Exception {
if(name.getText().trim().isEmpty() && surname.getText().trim().isEmpty() && pesel.getText().trim().isEmpty() && adres.getText().trim().isEmpty() && email.getText().trim().isEmpty() )
if(dateOfBirth.getValue() == null)
if(sexM.isSelected() || sexF.isSelected() || sexG.isSelected()){
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
}
}
答案 0 :(得分:0)
试试这个:
public void btn1(ActionEvent event) throws Exception {
if (name.getText().trim().length() == 0 && surname.getText().trim().length() == 0
&& pesel.getText().trim().length() == 0 && adres.getText().trim().length() == 0
&& email.getText().trim().length() == 0 && dateOfBirth.getValue() == null && sexM.isSelected()
|| sexF.isSelected() || sexG.isSelected()) {
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
将所有isEmpty()
替换为.length()
答案 1 :(得分:0)
在检查TextField
时,您会注意到有很多重复的代码。如果最好摆脱这个。
此外,通过使用3 if
你可能犯了一些错误:你允许没有显示新阶段而标签设置为错误信息的情况。
此外,有性别的部分看起来像是使用互相排斥的CheckBox
es / RadioButton
。在这种情况下,您应该使用ToggleGroup
,它允许您使用与DatePicker
使用的代码类似的代码检查选择:
/**
* Helper method for checking, none of the TextFields passed are empty.
*/
private static boolean allFilled(TextField... textFields) {
for (TextField textField : textFields) {
if (textField.getText().trim().isEmpty()) {
return false;
}
}
return true;
}
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
if (allFilled(name, surname, pesel, adres, email)
&& dateOfBirth.getValue() != null
&& sexToggleGroup.getSelectedToggle() != null) {
... show new stage ...
} else {
... display error message ...
}
答案 2 :(得分:0)
这是我的解决方案。也许这会对某人有所帮助。
@FXML
public void btn1(ActionEvent event) throws IOException {
TextField[] fieldList = new TextField[]{name, surname, pesel, adres, email};
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
boolean right = false;
for(TextField listF : fieldList)
if(listF.getText().equals("") || dateOfBirth.getEditor().getText().equals("") || sexToggleGroup.getSelectedToggle() == null){
lbl.setText("All of places have to be filled");
right = true;
break;
} else {
right = false;
}
if(right == false){
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}