如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单
How to prevent closing of AutoCompleteCombobox popupmenu on SPACE key press in JavaFX
中提到的代码在 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;
但问题是当用户按下 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;