我在JavaFX中有一个ComboBox。我想在用户键入或删除ComboBox中的字符时触发事件,以便我可以调用ComboBox.show()并使用自定义文本填充下拉列表,以制作一种预测文本"特征
但是,在文本更改时我找不到任何触发事件的方法。有这样的方法吗?如果没有,你能推荐任何其他方式来完成我想做的事情吗?
这是我的ComboBox:
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();
}
});
然而,这段代码的问题在于,只有当用户按下&#34; Enter&#34;在ComboBox中,或者当他们从下拉列表中选择一个项目时。
有什么想法吗?
答案 0 :(得分:1)
您可以使用
检索用于编辑组合框内容的TextField
myComboBox.getEditor();
与任何文本输入组件一样,其中的文本由可以使用StringProperty
检索的可观察textProperty()
表示。您可以向此属性添加一个侦听器,该侦听器会在文本更改时收到通知:
myComboBox.getEditor().textProperty().addListener((obs, oldText, newText) -> {
// do whatever you need with newText (or oldText too if you need)
});