如何在AutoComplete JavaFX不可编辑的ComboBox中允许“SPACE”字符?

问题描述 投票:0回答:1

当我在AutoComplete ComboBox中键入一个SPACE字符时,我可以获得要接受的空格字符,除了我用来管理它的addEventFilter代码乘以并为之前在空格之前键入的每个字符插入一个空格。您可以看到下面的屏幕截图示例,其中在3个字符(ive)之后添加了3个空格,然后在我包含其他字符(t)之后添加了4个空格,每个空格在键入单个SPACE之后添加,并且空格仅在我输入后出现下一个字符(例如'm')。

Adds 3 spaces then adds 4 after next character is typed

我使用ContolsFX AutoComplete尝试了这个,但它无法处理不可编辑的ComboBox - 并且无法找到任何相反的内容。在我研究的在线案例中,建议使用ComboBox的弹出皮肤 - addEventFilter来管理SPACE角色事件。几乎在所有情况下,消耗()并阻止选择和关闭空间。我没有发现任何严格允许输入空间的内容。我已尝试在此事件代码之前和之后的代码中添加SPACE,但addEventFilter event.consume()将删除它。仅当我在addEventFilter方法中管理其添加时,才会出现SPACE字符。我尝试了不同的事件,如KeyEvent.ANY,KeyEvent.KEY_TYPED和KeyEvent.KEY_RELEASE,并阅读KeyEvent上的文档,但只有KeyEvent.KEY_PRESSED似乎允许SPACE字符,它只是乘以空格的数量,并且没有插入直到下一个文本字符。

ComboBoxListViewSkin cbSkin = cbSkin = new ComboBoxListViewSkin(cmb);

// cmb是ComboBox

    cbSkin.getPopupContent().addEventFilter(KeyEvent.KEY_PRESSED, (event) -> {
        if(event.getCode() == KeyCode.SPACE){
            filter += " ";
            event.consume();}
    });
combobox autocomplete javafx-8
1个回答
0
投票

我能够解决我的问题。事件代码必须是ComboBoxAutoComplete构造函数的一部分,而不是onKeyPressed事件的一部分。

private ComboBoxListViewSkin cbSkin;

public ComboBoxAutoComplete(ComboBox<T> cmb) {
    this.cmb = cmb;
    cbSkin = new ComboBoxListViewSkin(cmb);
    originalItems = FXCollections.observableArrayList(cmb.getItems());
    cmb.setOnKeyPressed(this::handleOnKeyPressed);
    cmb.setOnHidden(this::handleOnHiding);
    cmb.setSkin(cbSkin);
    cbSkin.getPopupContent().addEventFilter(KeyEvent.KEY_PRESSED, (event) -> {
        if(event.getCode() == KeyCode.SPACE){
            filter += " ";
            event.consume();}
    });
}

addFilterEvent_in_Constructor

© www.soinside.com 2019 - 2024. All rights reserved.