Отключение кнопки, когда пустые текстовые поля не работают
BooleanBinding bb = new BooleanBinding() {
{
super.bind(addnum.textProperty(),addt1.textProperty(),addt2.textProperty(),
addt3.textProperty(),addasg.textProperty(),addatt.textProperty());
}
@Override
protected boolean computeValue() {
return (addnum.getText().isEmpty() && addt1.getText().isEmpty()
&& addt2.getText().isEmpty() && addt3.getText().isEmpty()
&& addasg.getText().isEmpty() && addatt.getText().isEmpty());
}
};
final Button b2 = new Button("Add");
b2.disableProperty().bind(bb);
Это мой код для отключения кнопки, когда текстовые поля пусты, то есть кнопка становится активной, когда все текстовые поля заполнены. Но этот код не работает. Когда один TextField заполнен, кнопка становится активной. Я использовал этот код в других частях моего проекта для этой же цели, добавьте, что он там работает нормально. Почему это не работает здесь?
1 ответ
Если вы хотите Button
чтобы быть активным, если и только если все поля заполнены (то есть не пустые), то вы используете неправильный оператор. использование ||
вместо &&
чтобы это работало.
Вы можете легко увидеть, что не так, если переформулировать формулу из computeValue
используя законы Деморгана; я пишу
a1, a2, ..., a6
вместо
`addnum.getText().isEmpty()`, `addt1.getText().isEmpty()`, ..., `addatt.getText().isEmpty()`:
следующие утверждения эквивалентны:
- кнопка активна
!(a1 && a2 && ... && a6)
(!a1 || !a2 ||...|| !a6)
- заполнено хотя бы одно поле
В отличие от этого с ||
вместо &&
:
следующие утверждения эквивалентны:
- кнопка активна
!(a1 || a2 || ... || a6)
(!a1 && !a2 &&...&& !a6)
- все поля заполнены