如何在JavaFX中触发Textfield侦听器?

问题描述 投票:2回答:1

在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
java listener
1个回答
4
投票

调用存储的侦听器引用

您可以记录对侦听器的引用,并在需要时调用它,例如:

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 code

© www.soinside.com 2019 - 2024. All rights reserved.