【问题标题】:JavaFX ComboBox TextField content upon keyevent键事件时的 JavaFX ComboBox TextField 内容
【发布时间】:2016-12-22 11:30:26
【问题描述】:

我正在构建一个带有自动完成功能的简单可编辑组合框。我想根据内部 TextField 的内容过滤 ComboBox 的内容。
我设法使它工作,但是在从 TextField 中删除字符时重新应用自动完成逻辑时遇到了问题。

据我所见,在按键事件发生后,文本字段的内容尚未包含添加的字符。
所以我只是做了一个简单的逻辑,添加字符串版本的KeyEvent来模拟TextField的内容。我之所以这样做是因为我需要完整的文本来应用我的逻辑
基本上:

// In constructor
cmb.getEditor().setOnKeyPressed(this::handleOnKeyPressed);

public void handleOnKeyPressed(KeyEvent e) {
  String text = comboBox.getEditor().getText() + e.getText();
  // Filtering logic based on text
}

这在输入某些字符时效果很好,但是当按下退格键或删除键时,它就不起作用了(这在代码中很明显)。
因此,我会看到的解决方案是检查插入符号位置并根据插入符号位置模拟退格/删除字符删除。但这很麻烦...
因此,我想知道是否没有其他更简洁的方法可以做到这一点?可以直接获取全文吗?一开始我想添加一个更改侦听器,但似乎无法使用 TextField。

有什么想法吗?
谢谢!

【问题讨论】:

  • 可以在TextField的textProperty()添加监听器。
  • 是的,确实,答案验证如下!

标签: javafx combobox autocomplete


【解决方案1】:

您可以在编辑器的textProperty 中添加ChangeListener<String>,每次编辑器字段内的文本更改时都会触发:

cmb.getEditor().textProperty().addListener(this::handleComboTextChange);

...

public void handleComboTextChange(ObservableValue<? extends String> o, String oldText, String newText) {
    ...
}

【讨论】:

  • 天哪,我觉得自己好蠢……当然,你必须通过文本属性为听众……谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多