2017-07-24 3 views
0

Ich habe 3 Felder:Wie ermittelt man, welches TextField EventHandler in JavaFX ausgelöst hat?

@FXML 
private TextField name; 

@FXML 
private TextField lastName; 

@FXML 
private TextField phoneNumber; 

ich für sie EventHandler erstellt:

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

Und als:

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

Wie kann ich feststellen, welche eine meiner drei Felder ausgelöst Veranstaltung? Ich möchte je verschiedene Funktionen aufrufen, auf dem einer von denen geändert wurde, wie: -

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

verwenden müssen, wäre es sinnvoller sein, 3-Handler anderen Ereignis zu verwenden, anstatt zu versuchen, die Logik für alle drei Felder in eine einzige Behandlungsroutine zu quetschen. Warum verwenden Sie auch keine Methode, um diese Ereignisse zu verarbeiten, und verwenden Sie das Attribut 'onInputMethodTextChanged' in der fxml, um den Handler zu registrieren? – fabian

Antwort

1

Statt sich auf alle von ihnen ein Event-Handler zu setzen, erstellen 3 verschiedene Handler

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

und fügen Sie sie dann zu ihren jeweiligen TextField s hinzu. Wenn Sie einen einzelnen Event-Handler verwenden, weil am Anfang und Ende ein gemeinsamer Code vorhanden ist, dann refaktorieren Sie diese einfach in separate Funktionen und rufen Sie sie in allen Event-Handlern auf.

Wenn Sie noch eine explizite Kontrolle dann

Object source = event.getSource(); 
if(source == name) { 
    changedName(); 
} else if(source == lastName) { 
    changedLastName(); 
} else if(source == phoneNumber) { 
    changedPhoneNumber(); 
} 
1
TextField input = ((TextField) event.getSource()); 
input.getId(); 
Verwandte Themen