Задача собственно такая:
Имеется основное поле ввода TextField surnameNamePatronymicID
- принимает ФИО, имеется кнопка
Button fillButtonAction
- именуемая "заполнить"
При нажатии на кнопку "заполнить" парсится введенное (разбивается по пробелам) и в массив, далее из массива в нужные поля, далее из этих полей в нужные TextField
.
this.fullName = textField.getText();
String[] fullNameArr = this.fullName.split("\\s");
this.surname = fullNameArr[0];
this.name = fullNameArr[1];
this.patronymic = fullNameArr[2];
Собственно вопрос в чем, нужна некая защита от "дурака", корректный ввод.
Сейчас реализовал так, если поле TextField surnameNamePatronymicID
пустое, то кнопка "заполнить" не активна.
...
@FXML
private TextField surnameNamePatronymicID;
@FXML
private Button fillButtonAction;
public void initialize() {
fillButtonAction.disableProperty().bind(surnameNamePatronymicID.textProperty().isEmpty());
}
@FXML
private void fillButtonAction() throws IOException {
...
Но хочется чтобы было такая проверка, к примеру: текст " " текст " " текст и только после этого кнопка становится активной, т.е. ввели Иванов Иван Иванович и кнопка стала активной.
Знаний в Java не так много, прошу сделать на это скидку.
Так же если есть другие варианты проверки правильности ввода - приветствуются! Спасибо.
Другими словами, как заставить пользователя ввести корректно ФИО?
Вы можете поставить слушатель на ваш TextField
surnameNamePatronymicID.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
try{String s = surnameNamePatronymicID.getText();
if(s.length()>5){
// Не менее 5 символов
fillButtonAction.setDisable(false);
return;
}
fillButtonAction.setDisable(true);
}
catch (Exception e){
fillButtonAction.setDisable(true);
}
}
});
Всю эту богодельню, конечно лучше поместить в отдельный класс/метод, и вызвать с помощью лямбды. Метод должен принимать ссылки на TextField и ваш button
surnameNamePatronymicID.setOnKeyReleased(event -> YourClass.method(surnameNamePatronymicID,fillButtonAction));
//Пример вызова метода ( альтернатива варианту выше )
Надеюсь вы справитесь с тем что нужно написать в методе другого класса.
Отмечу так же, что лучше использовать setOnKeyReleased, так вы гарантированно получите последний нажатый символ.
Поставить слушатель на изменение текста TextField.
surnameNamePatronymicID.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if(newValue.length()<5) {
// good
}else {
// bad
}
}
});
Этот обработчик вызывается при любом изменение текста. Например если пользователь захочет сделать копи-паст это все равно будет работать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть сканер Int чиселС помощью try catch обрабатываю ошибку того, что это не число типа Int, но при вводе чего-то другого, кроме целого числа выдается...
Ошибка в return getDistEclipse хочет объявление отдельного класса для getDist