JavaFX中CSS Next-sibling selector (+) 解析报错是什么原因?
JavaFX 相邻兄弟选择器(+)报错解决方案
根本原因
JavaFX 内置的 CSS 解析器*并未实现相邻兄弟选择器(+)和通用兄弟选择器(~)*的支持,官方 CSS 参考文档存在疏漏,未明确标注这两类选择器的禁用状态。
你遇到的Expected LBRACE at [2,13]报错是因为解析器无法识别+作为选择器语法的一部分,在扫描到+字符时判定当前选择器已经结束,期望直接匹配左大括号,因此抛出语法错误。你用到的子选择器(>)属于 JavaFX 明确支持的选择器类型,因此可以正常解析。
替代实现方案
- 手动给需要匹配的相邻节点添加自定义样式类,比如给第二个带
.thin-border的节点额外新增.adjacent-border类,样式规则修改为:
.thin-border.adjacent-border { -fx-border-insets: -1; }
- 若节点是动态生成的,可以在 Java 代码中遍历父容器的子节点,给除第一个之外所有带有
.thin-border类的节点手动设置-fx-border-insets属性,或者追加自定义样式类 - 固定布局的场景也可以直接在 FXML 标签中通过
style属性直接写内联样式实现相同效果
内容的提问来源于stack exchange,提问作者toni714
相关产品推荐
相关产品推荐

