如何确定哪个文本字段触发 JavaFX 中的事件处理程序?

How to determine which TextField triggered EventHandler in 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);

如何确定我的 3 个字段中的哪一个触发了事件? 我想根据更改的功能调用不同的功能,例如:-

if(name){
function changedName();
}
else if(lastName){
function changedLastName();
}
 else if(phoneNumber){
function changedPhoneNumber();
}
TextField input = ((TextField) event.getSource());
input.getId();

与其为所有事件设置一个事件处理程序,不如创建 3 个不同的处理程序

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

然后将它们添加到各自的 TextField 中。如果您使用单个事件处理程序是因为在开始和结束处有公共代码,那么只需将它们重构为单独的函数并在所有事件处理程序中调用它们。

如果您仍然需要显式检查,请使用

Object source = event.getSource();
if(source == name) {
    changedName();
} else if(source == lastName) {
    changedLastName();
} else if(source == phoneNumber) {
    changedPhoneNumber();
}