如何检查所有地方是否为空?

How to check if all of places are empty?

我写了这个方法,因为我想在按下按钮时检查所有地方是否文本字段、日期选择器和单选按钮为空,但是它不起作用。

我应该在这段代码中更正什么,或者我应该以不同的方式做一个方法?

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();
            }
        }
    }
}

试试这个:

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()

检查 TextField 时,您会注意到有很多重复代码。如果摆脱这个会更好。

此外,通过使用 3 ifs,您可能犯了一些错误:您允许既不显示新阶段也不将标签设置为错误消息的情况。

此外,性别部分看起来您使用的 CheckBoxes/RadioButtons 是互斥的。在这种情况下,您应该使用 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 ...
}

这是我的解决方案。也许这会对某人有所帮助。

@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();
    }
 }