簡體   English   中英

如何在 JavaFX 中觸發 Textfield 偵聽器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM