You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除ControlsFX Textfields.bindAutoCompletion的滚动条

ControlsFX自动补全TextField移除弹出列表滚动条方案

完全可以实现,不需要修改ControlsFX框架源码,有两种成熟的实现路径:

方法1:代码逻辑控制(精准生效)

ControlsFX的自动补全弹出层本质是承载ListView的Popup组件,绑定自动补全后可以直接通过公开API拿到弹窗实例,修改内部列表的滚动条策略即可:

  • 先正常构建自动补全绑定
TextField inputField = new TextField();
// 替换为你自己的补全候选集/补全逻辑
AutoCompletionBinding<String> autoCompleteBinding = TextFields.bindAutoCompletion(inputField, "选项1", "选项2", "选项3");
  • 给弹窗添加显示监听,弹窗加载完成后找到内部ListView,隐藏滚动条
autoCompleteBinding.getAutoCompletionPopup().setOnShown(event -> {
    Popup autoCompletePopup = autoCompleteBinding.getAutoCompletionPopup();
    // 遍历弹窗内容节点找到补全列表
    Optional<ListView<?>> suggestList = autoCompletePopup.getContent().stream()
            .filter(ListView.class::isInstance)
            .map(ListView.class::cast)
            .findFirst();

    suggestList.ifPresent(list -> {
        // 隐藏垂直滚动条
        list.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        // 如需隐藏水平滚动条可放开下面注释
        // list.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    });
});

隐藏滚动条不会影响列表交互,用户依然可以通过鼠标滚轮、键盘上下方向键滚动浏览所有候选项。

方法2:CSS样式控制(实现最简单)

如果不需要精准控制范围,可以直接通过CSS全局匹配自动补全弹窗的列表组件,不需要写额外Java逻辑:

/* 匹配自动补全弹窗内的候选列表 */
.auto-complete-popup .list-view {
    -fx-vbar-policy: never;
    /* 隐藏水平滚动条可放开下面注释 */
    /* -fx-hbar-policy: never; */
}

把这段样式加入项目全局样式表,加载到对应Scene即可全局生效。

对应界面效果参考:
自动补全弹出列表效果参考

内容的提问来源于stack exchange,提问作者mori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:57:19