當需要更改文本時,需要在多個TextField上執行驗證。驗證是完全一樣的,所以我認爲我使用一個單一的程序。我無法使用onInputMethodTextChanged,因爲即使控件沒有焦點,我也需要執行驗證。所以我加了一個ChangeListener到textProperty。確定JavaFX更改監聽器內部的調用節點
private TextField firstTextField;
private TextField secondTextField;
private TextField thirdTextField;
protected void initialize() {
ChangeListener<String> textListener = new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
// Do validation
}
};
this.firstTextField.textProperty().addListener(textListener);
this.secondTextField.textProperty().addListener(textListener);
this.thirdTextField.textProperty().addListener(textListener);
}
但是,在執行驗證時,無法知道哪個TextField觸發了更改。我如何獲得這些信息?
爲了避免出現'ClassCastException',我想你可以期待'Control'而不是'TextField'並檢查Control是否是'TextField',就像'if(mControl instanceof TextField)((TextField)mControl ).doSomething()' –