如何确定哪个TextField在JavaFX中触发了EventHandler?

时间:2017-07-24 16:51:27

标签: javafx eventhandler

我有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();
}

2 个答案:

答案 0 :(得分:1)

TextField input = ((TextField) event.getSource());
input.getId();

答案 1 :(得分:1)

不是在所有这些上设置一个事件处理程序,而是创建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();
}