【问题标题】:How do I allow a "SPACE" character in an AutoComplete JavaFX uneditable ComboBox?如何在 AutoComplete JavaFX 不可编辑的 ComboBox 中允许“SPACE”字符?
【发布时间】:2019-09-01 01:11:36
【问题描述】:

当我在自动完成组合框中键入空格字符时,我可以获得要接受的空格字符,但我用来管理它的 addEventFilter 代码会相乘并为之前在空格之前键入的每个字符插入一个空格。您可以在下面看到一个屏幕截图示例,其中在 3 个字符 (ive) 之后添加了 3 个空格,然后在我包含一个附加字符 (t) 之后添加了 4 个空格,每个空格都在键入一个空格之后,并且空格仅在我键入后出现下一个字符(例如“m”)。

我确实尝试过使用 ContolsFX AutoComplete,但它无法处理不可编辑的 ComboBox - 并且找不到任何相反的东西。在我研究的在线案例中,推荐使用 ComboBox 的弹出皮肤 - addEventFilter 来管理 SPACE 字符事件。在几乎所有情况下,它都是消耗()并防止空间被选择和关闭。我没有找到任何严格允许进入该空间的东西。我尝试在此事件代码之前和之后在代码中添加 SPACE,但 addEventFilter event.consume() 将删除它。只有当我在 addEventFilter 方法中管理它的添加时,SPACE 字符才会出现。我尝试了不同的事件,例如 KeyEvent.ANY、KeyEvent.KEY_TYPED 和 KeyEvent.KEY_RELEASE 并阅读了有关 KeyEvent 的文档,但似乎只有 KeyEvent.KEY_PRESSED 允许使用空格字符,它只是将空格数相乘,并没有'直到下一个文本字符才插入。

ComboBoxListViewSkin cbSkin = cbSkin = new ComboBoxListViewSkin(cmb);

// cmb 是组合框

    cbSkin.getPopupContent().addEventFilter(KeyEvent.KEY_PRESSED, (event) -> {
        if(event.getCode() == KeyCode.SPACE){
            filter += " ";
            event.consume();}
    });

【问题讨论】:

    标签: combobox autocomplete javafx-8


    【解决方案1】:

    我能够解决我的问题。事件代码必须是 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();}
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      • 2016-10-21
      • 2017-06-28
      • 2015-05-21
      • 2010-09-10
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多