在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 code。