我想验证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;");
}
}
}
});
如何做到这一点?
答案 0 :(得分:4)
您可以向textProperty()
添加侦听器,而不是向focusProperty()
添加侦听器。这样,只有在TextField失去或获得焦点时才会触发侦听器。
textField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if(!newValue) { // we only care about loosing focus
// check condition and apply necessay style
}
});