ControlsFX 11.1.2 SearchableComboBox样式失效:聚焦状态不生效
解决ControlsFX 11.1.2 SearchableComboBox样式不生效问题
问题原因
ControlsFX的SearchableComboBox内部结构和标准JavaFX ComboBox不同,输入区域是独立的TextField,焦点状态作用在这个内部文本框上,而非外层容器。同时原样式选择器的层级关系错误,导致样式无法匹配到目标组件。
修正后的样式代码
/* 外层容器基础样式 */ .searchable-combo-box { -fx-background-color: transparent; -fx-background-insets: 0; -fx-background-radius: 0; -fx-border-width: 0 0 1 0; -fx-border-color: #053445; -fx-border-radius: 0; } /* 内部文本框基础样式 */ .searchable-combo-box .text-field { -fx-background-color: transparent; -fx-background-insets: 0; -fx-background-radius: 0; -fx-text-fill: black; -fx-prompt-text-fill: gray; } /* 文本框聚焦时的自身样式 */ .searchable-combo-box .text-field:focused { -fx-background-color: transparent; -fx-background-insets: 0; -fx-background-radius: 0; } /* 内部文本框聚焦时,外层容器的边框样式 */ .searchable-combo-box:focus-within { -fx-border-color: #1291bf; }
关键调整说明
- 移除原错误的
.searchable-combo-box .combo-box-base层级:SearchableComboBox不包含标准的combo-box-base节点,直接选择.text-field即可匹配内部输入框。 - 使用
:focus-within伪类:当内部文本框获得焦点时,外层容器会触发该状态,以此实现聚焦时的边框颜色变化。 - 将
-fx-prompt-text-fill移至.text-field样式:提示文本是内部文本框的属性,外层容器无法直接控制。
内容的提问来源于stack exchange,提问作者Victor Espinoza
相关产品推荐
相关产品推荐

