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

Posted

技术标签:

【中文标题】如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单【英文标题】:How to prevent closing of AutoCompleteCombobox popupmenu on SPACE key press in JavaFX 【发布时间】:2018-10-05 10:34:25 【问题描述】:

借助https://github.com/jesuino/javafx-combox-autocomplete/blob/master/src/main/java/org/fxapps/ComboBoxAutoComplete.java 中提到的代码,我在 JavaFX 中创建了一个 AutoCompleteCombobox

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

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

在https://bugs.openjdk.java.net/browse/JDK-8087549enter link description here 上提到了错误

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

【问题讨论】:

按照她的建议联系该特定版本的所有者:如果您希望它适用于所有角色,请给我发送 PR 这里提到了错误bugs.openjdk.java.net/browse/JDK-8087549我只需要覆盖提到的方法 好挖掘 :) 多么古老的错误 .. 【参考方案1】:

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

您只需将 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 测试了这个解决方案,但它应该也可以在其他平台上运行。

【讨论】:

【参考方案2】:

作为补充,这也适用于 java 8,您只需导入内部 Skin 类:

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

【讨论】:

以上是关于如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中按下返回键时在文本字段之间切换

在 Monogame 中按下键时,我需要帮助上下移动精灵

在 URL 包含“#”的地址栏中按下 Enter 键时的行为

当我在 tkinter 游戏中按下一个键时,敌人会停止

Android - 如何防止按下音量或相机键时手机屏幕打开?

如何防止在WinForms TextBox中按下alt键引起的哔声?