当前位置: 首页 > 知识库问答 >
问题:

keyevent上的JavaFX组合框TextField内容

裴嘉许
2023-03-14

我正在建立一个简单的可编辑组合框与自动完成。我想根据内部TextField的内容筛选组合框的内容。
我设法使其工作,但当从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
}

这在键入某些字符时工作得很好,但在按backspace或delete键时,它就不起作用了(从代码中可以看出这一点)。
所以,我看到的解决方案是检查插入符号的位置,并根据插入符号的位置模拟backspace/delete字符的移除。但这是相当麻烦的…
因此,我想知道是否有其他更整洁的方法来做到这一点?有可能直接获得全文吗?一开始我想过添加一个更改监听器,但似乎不可能使用TextField。

有什么想法吗?
谢谢!

共有1个答案

黄丰
2023-03-14

您可以将ChangeListener 添加到编辑器的TextProperty中,每次更改编辑器字段中的文本时,都会触发此选项:

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

...

public void handleComboTextChange(ObservableValue<? extends String> o, String oldText, String newText) {
    ...
}
 类似资料:
  • 提前谢了。

  • 我需要关于设置组合框按钮单元格的帮助。我使用一个组合框来显示可观察列表中的数据,该列表包含两个列的表中的数据,“步骤”和“下一步”(下一步包含一个插入在步骤列中的项目);我需要做的是显示带有“步骤”列表的组合框列表单元格和相对的“下一步”按钮单元格。现在,我可以正确地看到列表单元格,但我的按钮单元格总是空的。 代码: 提前感谢。

  • 我试图创建一个,它将显示所选的预览,但是会显示字符串值。 唯一有效的方法似乎是创建

  • 我想要一个组合框,它会在用户键入时过滤列表项。它应该如下工作: 键入时,文本字段应该显示一个可能的选择,但是用户尚未键入的单词部分应该突出显示。 当他打开列表时,下拉框应该只显示可能的选项? 使用箭头键,用户应该在缩小可能的项目后选择剩余的项目之一。 过滤并不重要,跳转到第一个匹配的选择也可以。 有类似的吗?

  • 我正在尝试使用一个可编辑的组合框。因为我想添加一个用于按回车键的监听器。我尝试了下面的选项,但都不起作用。:( < code>cmb_year是组合框对象。

  • 这是我的全部代码 如何将所选组合框中的不同文本显示到声明为 TextField txtActivity