当组合框的文本更改时,如何在 JavaFX 中触发代码



我在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)
});

最新更新