如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单

How to prevent closing of AutoCompleteCombobox popupmenu on SPACE key press in JavaFX

我借助 https://github.com/jesuino/javafx-combox-autocomplete/blob/master/src/main/java/org/fxapps/ComboBoxAutoComplete.java

中提到的代码在 JavaFX 中创建了一个 AutoCompleteCombobox

但问题是当用户按下 SPACE 键时组合框弹出窗口关闭。我想继续使用 space 字符过滤并防止弹出窗口关闭。

我已经处理了组合框上的所有三个事件(按键、按键释放、按键输入),但没有解决方案。 我认为这是由组合框项目列表视图上的按键事件引起的。

https://bugs.openjdk.java.net/browse/JDK-8087549enter link description here

中提到了错误

我只想知道如何覆盖处理 SPACE 按键的事件处理程序。

我也一直在尝试创建一个 AutoCompleteCombobox 并且想知道为什么每次输入 space 时弹出窗口都会关闭,直到我得到你的提示实际错误在 ComboBoxListViewSkin class.

您只需要将 ComboBox 的外观替换为具有 EventFilter 的新外观即可。

ComboBoxListViewSkin<T> comboBoxListViewSkin = new ComboBoxListViewSkin<T>(comboBox);
comboBoxListViewSkin.getPopupContent().addEventFilter(KeyEvent.ANY, (event) -> {
    if( event.getCode() == KeyCode.SPACE ) {
        event.consume();
    }
});
comboBox.setSkin(comboBoxListViewSkin);

我只在 Ubuntu 上用 Oracle Java 10 测试了这个解决方案,但它应该也适用于其他平台。

作为补充,这在java8中也有效,你只需要导入内部皮肤class:

import com.sun.javafx.scene.control.skin.ComboBoxListViewSkin;