0
    ArrayList<String> aniNames = new ArrayList<>();

我与数据库建立连接,并在上面的 ArrayList 中存储了 7K 动漫名称。

    JFXAutoCompletePopup<String> autoCompPop = new JFXAutoCompletePopup<>();
    for (int i=0; i<aniNames.size(); i++){
        autoCompPop.getSuggestions().addAll(aniNames.get(i));
    }
    autoCompPop.setSelectionHandler(event ->{
        autoTF.setText(event.getObject());
    });

    autoTF.textProperty().addListener(observable -> {
    autoCompPop.filter(string -> string.toLowerCase().contains(autoTF.getText().toLowerCase()));
    if (autoCompPop.getFilteredSuggestions().isEmpty() || autoTF.getText().isEmpty()) {
        autoCompPop.hide();
    } else {
        autoCompPop.show(autoTF);
    }
});

所以我写了这个程序,当我输入一些东西时,它会显示自动完成弹出窗口。

当我输入一个字母时,让我们说“a”或任何其他字母,它显示几乎所有动漫名称中都有“a”,这意味着几乎所有 7k 动漫。

如果超过某个数字,我想限制它显示的结果数量,例如,如果超过 20 部动漫的名称中有“a”,那么我希望它只在弹出窗口中显示前 20 部动漫。

4

1 回答 1

0

改变:

autoCompPop.filter(string -> string.toLowerCase().contains(autoTF.getText().toLowerCase()));

至:

autoCompPop.filter(string -> string.toLowerCase().startsWith(autoTF.getText().toLowerCase()));

可能会帮助您,不是通过强制限制结果,而是通过告诉弹出窗口搜索以输入文本开头的名称而不是包含输入文本的名称,从而减少结果数量。

JFXAutocompletePopup 似乎没有限制搜索结果的方法,因为 setCellLimit() 仅限制可见单元格的数量(本质上是缩短弹出窗口的高度,而不是实际的项目数)。 JFXAutocompletePopup 源代码

于 2018-10-16T20:42:08.873 回答