JavaFXTextField验证

JavaFXTextField验证,java,javafx,Java,Javafx,我想验证JavaFX文本字段中输入的数据是否为整数。我只想在用户完全写入输入并转到下一个字段后进行验证 我尝试过一种方法,但不起作用,我不明白为什么: product_quantity.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, Str

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

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

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;");
          }
       }
    }
});
product_quantity.textProperty().addListener(新的ChangeListener()){
@凌驾

public void已更改(observeValue您可以将侦听器添加到
focusProperty()
,而不是将侦听器添加到
focusProperty()
。这样,只有当TextField失去或接收到焦点时,才会触发侦听器

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

您不只是设置TextField的值有什么原因吗?例如:
TextField.setTextFormatter(新的TextFormatter(新的NumberStringConverter(NumberFormat.getIntegerInstance()))
如果有无效输入,我必须将total_cost字段框改为红色。输入正确后,我会删除颜色。一个小问题,每当我将颜色改为红色,然后再改为白色时,字段框看起来不像以前的原始形式。我如何将其恢复为原始形式。我使用:
total_cost.setStyle(“-fx背景色:红色;”;
总成本。设置样式(null);
修复样式以返回默认设置。