Как определить, какое TextField вызвало EventHandler в JavaFX?

У меня есть 3 поля:

@FXML
private TextField name;

@FXML
private TextField lastName;

@FXML
private TextField phoneNumber;

Я создал для них EventHandler:

 EventHandler<InputEvent> fieldChangeListener = new EventHandler<InputEvent>() {
            public void handle(InputEvent event) {
                String input = ((TextField) event.getSource()).getText();
                System.out.println("Changed: "+event.getSource());
                event.consume();
            }
        };

И назначено им:

name.addEventHandler(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, fieldChangeListener);
lastName.addEventHandler(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, fieldChangeListener);
phoneNumber.addEventHandler(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, fieldChangeListener);

Как я могу определить, какое из трех полей вызвало событие? Я хочу вызывать разные функции в зависимости от того, какая из них была изменена, например: -

if(name){
function changedName();
}
else if(lastName){
function changedLastName();
}
 else if(phoneNumber){
function changedPhoneNumber();
}

person Alyona    schedule 24.07.2017    source источник
comment
Было бы более уместно использовать 3 разных обработчика событий вместо того, чтобы пытаться втиснуть логику для всех 3 полей в один обработчик. Кроме того, почему бы вам не использовать метод для обработки этих событий и использовать атрибут onInputMethodTextChanged в fxml для регистрации обработчика?   -  person fabian    schedule 24.07.2017


Ответы (1)


Вместо того, чтобы устанавливать один обработчик событий для всех, создайте 3 разных обработчика.

EventHandler<InputEvent> nameChangedHandler = (event) -> changedName();
EventHandler<InputEvent> lastNameChangedHandler = (event) -> changedLastName();
EventHandler<InputEvent> phoneNumberChangedHandler = (event) -> changedPhoneNumber();

а затем добавьте их в соответствующие TextFields. Если вы используете один обработчик событий, потому что в начале и в конце есть общий код, просто реорганизуйте их в отдельные функции и вызовите их во всех обработчиках событий.

Если вам все еще нужна явная проверка, используйте

Object source = event.getSource();
if(source == name) {
    changedName();
} else if(source == lastName) {
    changedLastName();
} else if(source == phoneNumber) {
    changedPhoneNumber();
}
person Siddhesh Rane    schedule 24.07.2017