我在JavaFX中有一个ComboBox。每当用户在 ComboBox 中键入或删除字符时,我都想触发一个事件,以便我可以调用 ComboBox.show(( 并使用自定义文本填充下拉列表,以创建一种"预测文本"功能。
但是,我找不到任何方法在文本更改时触发事件。是否存在任何这样的方法?如果没有,你能推荐任何其他方法来完成我正在做的事情吗?
这是我的组合框:
ObservableList<String> options =
FXCollections.observableArrayList(
"Option 1",
"Option 2",
"Option 3"
);
ComboBox myComboBox = new ComboBox(options);
myComboBox.setEditable(true);
这是我尝试用来触发事件的代码:
myComboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Event triggered.");
myComboBox.show();
}
});
但是,此代码的问题在于,仅当用户在 ComboBox 中按"Enter"或从下拉列表中选择项目时,它才会关闭。
有什么想法吗?
您可以检索用于编辑组合框内容的TextField
myComboBox.getEditor();
与任何文本输入组件一样,其中的文本由可观察StringProperty
表示,您可以使用 textProperty()
进行检索。您可以向此属性添加一个侦听器,该侦听器在文本更改时收到通知:
myComboBox.getEditor().textProperty().addListener((obs, oldText, newText) -> {
// do whatever you need with newText (or oldText too if you need)
});