【问题标题】:How to check if all of places are empty?如何检查所有地方是否都是空的?
【发布时间】:2017-06-09 18:17:17
【问题描述】:

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

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

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 个 if 而不是一个,在某些情况下既没有设置标签的文本,也没有显示新阶段。 (如果其中一个文本字段不为空或日期选择器不为空。)这是期望的行为吗?
  • @XtrEmE 我的代码对你有用吗??

标签: javafx datepicker radio-button textfield fxml


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    在查看TextFields 时,您会注意到有很多重复的代码。如果摆脱它会更好。

    此外,如果使用 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 ...
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-01-31
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        相关资源
        最近更新 更多