如何防止在 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 弹出菜单的主要内容,如果未能解决你的问题,请参考以下文章
在 URL 包含“#”的地址栏中按下 Enter 键时的行为