代码之家  ›  专栏  ›  技术社区  ›  Alyona

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

  •  1
  • Alyona  · 技术社区  · 7 年前

    @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 回复  |  直到 7 年前
        1
  •  1
  •   Siddhesh Rane    7 年前

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

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

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

    Object source = event.getSource();
    if(source == name) {
        changedName();
    } else if(source == lastName) {
        changedLastName();
    } else if(source == phoneNumber) {
        changedPhoneNumber();
    }
    
        2
  •  1
  •   Imran    7 年前
    TextField input = ((TextField) event.getSource());
    input.getId();