如何移除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
相关产品推荐
相关产品推荐

