JavaFX 文本字段验证

Moh*_*sin 2 java javafx

我想验证 JavaFX TextField 中输入的数据是否为整数。我只想在用户完全写入输入并移动到下一个字段后才进行此验证。

尝试过一种方法但它不起作用,我不明白为什么:

product_quantity.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
       if (!product_quantity.isFocused()) {
          if (!product_quantity.getText().matches("[0-9]*")) {
              total_cost.setStyle("-fx-background-color: red;");
          } else {
              total_cost.setText(Float.toString(Float.parseFloat(newValue) * Float.parseFloat(unit_cost.getText())));
              total_cost.setStyle("-fx-background-color: white;");
          }
       }
    }
});
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

Ita*_*iha 5

textProperty()您可以向 中添加侦听器,而不是向中添加侦听器focusProperty()。这样,仅当 TextField 失去或接收焦点时才会触发侦听器。

textField.focusedProperty().addListener((observable, oldValue, newValue) -> {
    if(!newValue) { // we only care about loosing focus
       // check condition and apply necessay style
    }
});
Run Code Online (Sandbox Code Playgroud)