当ComboBox的文本发生变化时,如何在JavaFX中触发代码?

时间:2018-04-07 16:52:50

标签: java user-interface javafx combobox

我在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中,或者当他们从下拉列表中选择一个项目时。

有什么想法吗?

1 个答案:

答案 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)
});