[英]How to fire a Textfield listener in JavaFX?
在 Java 中,我試圖觸發一個 Textfield 偵聽器。
我發現的唯一解決方案是使用帶有空格的 setText:
txt.setText(" ");
正確的做法是什么?
細節:
TextField txt = new TextField();
txt.setPromptText("Search");
txt.textProperty().addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldVal,Object newVal) {
//...to do
}
};
txt.setText(" "); //Firing the listener
調用存儲的偵聽器引用
您可以記錄對偵聽器的引用並隨時調用,例如:
TextField txt = new TextField();
txt.setPromptText("Search");
ChangeListener<String> txtListener =
(observable, oldValue, newValue) ->
System.out.println(
"Search text updated to: " + newValue
);
txt.textProperty().addListener(
txtListener
);
txtListener.changed(
txt.textProperty(),
null,
"frobozz"
);
這將輸出“ Search text updated to: frobozz
”。 我不太喜歡這個的地方是它沒有太多的語義含義,文本也沒有真正改變。
替代方法
另一種方法是使用與您的應用程序相關的命名函數,並在您想要在偵聽器內部或外部隨時調用該函數。 我更喜歡這種替代方法。
txt.textProperty().addListener(
(observable, oldValue, newValue) -> search(newValue)
);
search(null);
. . .
private void search(String searchText) {
System.out.println(
"Search result for: " + searchText
);
}
這將輸出:“ Search result for: null
”。
注意:此答案使用Java 8 代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.