【问题标题】:Check for empty textfield检查空文本字段
【发布时间】:2017-08-25 20:00:16
【问题描述】:

好的,所以,我所拥有的应该是一个简单的掷骰子。 2 个文本字段,一个用于您要掷骰子的数量,另一个用于总数。 (好吧,每个骰子掷出三分之一,但这不是重点)只要骰子文本字段的数量不为空,这很好用。当该字段为空时,我只得到一个NumberFormatException

我的代码:

        Button d4 = new Button("d4  ");
    d4.setLayoutX(240);
    d4.setLayoutY(90);
    d4.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {
            tooltip.setText("");                
            int d4_num = Integer.parseInt(d4_text.getText()); //d4_text is for the number of die
            d4_num = d4_num + 1;
            int sum = 0;
            for (int i = 1; i < d4_num; i++){
                int result = 1 + (int)(Math.random() *4);
                sum = sum += result;
                tooltip.appendText((String.valueOf("d4_" + i + " =" + result + "\n")));

            }
            d4_result.setText(String.valueOf(sum));
        }
    });

我尝试以不同的方式检查d4_text 的值,每一种都给出错误,因为我无法检查空值、字符串或其他。

【问题讨论】:

    标签: java javafx input textfield


    【解决方案1】:

    要安全地检查“字段是否包含整数值”,您可以执行以下操作:

    final String fieldValue = d4_text.getText();
    if (fieldValue != null && fieldValue.matches("\\d+")) {
        int d4_num = Integer.parseInt(fieldValue);
        ... the rest of your logic that relies on having a correct d4_num value
    } else {
        ... output some error message like 'please enter a few digits'
    }
    

    在这里您检查该字段是否包含一个仅由数字组成的非空字符串,至少一个。

    仍然有可能用户会在输入一个对于int 而言太长的数字时破坏此操作;您还可以对字段值长度添加一些合理的限制:

    if (fieldValue != null && fieldValue.matches("\\d{2}")) {
    

    这里只接受由 2 位数字组成的数字。

    【讨论】:

    • 嘿,谢谢!基本上正是我想要做的,但我不知道怎么做。
    【解决方案2】:

    在传递整数值之前试试这个

    if (d4_text.getText() == null || d4_text.getText().trim().isEmpty()) {
     // your code here }
    

    【讨论】:

      【解决方案3】:

      您可以捕获该异常,并将其设置为零以防出现NumberFormatException

      int d4_num;
      
      try {
          d4_num = Integer.parseInt(d4_text.getText());
      } catch (NumberFormatException e) {
          d4_num = 0;
      }
      

      【讨论】:

        【解决方案4】:

        我试过用不同的方式检查 d4_text 的值,每一种 要么因为我无法检查 null 或字符串而给出错误,要么 随便。

        首先:检查该字段是否不是null(请注意,默认情况下,Java FX 输入文本字段不为空,但棘手的客户端代码可能会更改它)并且不为空(通过修剪空格)。
        第二:检查它是否是一个数字或捕获异常。

        使用Integer 而不是int 有助于确定提交的值是否为Integer。接受 null 值的 Integer 可能会传达失败的输入,但必须用数值​​赋值的 int 不能。

        Integer d4_num = null;
        String textToConvertToInt = d4_text.getText();
        if (textToConvertToInt != null && !textToConvertToInt.trim().equals("")){
           try{
               d4_num = Integer.parseInt(textToConvertToInt); 
           }
           catch (NumberFormatException e){
             // handle the exception
           }
         }
        

        您也可以使用apache-common-lang 来做到这一点:

        String textToConvertToInt = d4_text.getText();
        Integer d4_num = null;
        if (NumberUtils.isNumber(textToConvertToInt)){
          d4_num = Integer.parseInt(textToConvertToInt );
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-04
          • 2021-07-01
          • 2015-12-28
          • 1970-01-01
          • 2014-02-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-28
          相关资源
          最近更新 更多