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

时间:2017-06-09 18:17:18

标签: javafx datepicker radio-button textfield fxml

我写了这个方法,因为我想检查所有的地方,如果我按下按钮时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();
            }
        }
    }
}

3 个答案:

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