Я запутался с выполнением блока кода. У меня есть 4 текстовых поля, каждое из которых quantity
, price
, vat
и amount
.
Я хочу добавить прослушиватель событий в текстовые поля price
и quantity
, чтобы при каждом изменении текста в каждом из них новые вычисления vat
и новые значения amount
автоматически отображались в соответствующих текстовые поля.
Я думаю о чем-то вроде этого:
private void addEventListeners() {
txtInvoiceQuantity.textProperty().addListener((ChangeListener) (observable, oldVal, newVal) -> calculateVATAmount((String) oldVal, (String) newVal));
}
private void calculateVATAmount(String oldVal, String newVal) {
if (newVal.length() > oldVal.length()) {
if (txtInvoiceQuantity.getText().length() > 0 && txtInvoicePrice.getText().length() > 0) {
try {
double quantity = Double.parseDouble(newVal);
double price = Double.parseDouble(txtInvoicePrice.getText());
double vat = Double.parseDouble(lblVAT.getText()) / 100;
double vatamount = quantity * price * vat;
txtInvoiceVAT.setText(String.valueOf(vatamount));
double invoiceAmount = (price * quantity) + vatamount;
txtInvoiceAmount.setText(String.valueOf(invoiceAmount));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Я, очевидно, не могу использовать это событие, как оно есть на txtInvoiceQuantity
. Так как я могу изменить calculateVATAmount(oldVal,newVal)
так, чтобы он делал то, что я хочу?
Как я также учитываю oldVal (в случае, если пользователь нажимает пробел)?