如何在JavaFX中用通配符/正则匹配动态数量的ID选择器?
JavaFX中使用通配符/属性选择器匹配动态ID节点
嘿,刚好我对JavaFX的CSS选择器这块比较熟,来给你说清楚怎么实现你要的需求!
JavaFX的CSS是支持属性选择器的,和你在HTML里用的div[id^='id']这类写法逻辑一致,完全可以用来匹配一批ID符合特定规则的节点,不用一个个写#id1, #id2这种繁琐的选择器。下面是具体的用法:
常用的通配符式匹配规则
针对ID的匹配,你可以用以下几种属性选择器语法:
匹配ID以指定字符串开头的节点:用
^=符号。比如要匹配所有ID以id开头的节点,写法是:#*[id^='id'] { /* 你的样式代码 */ -fx-background-color: lightcoral; -fx-border-color: black; }这里的
#*表示匹配所有带有ID属性的节点,如果你的目标节点都是特定类型(比如Label、Button),可以把#*换成具体的元素类型,比如Label[id^='id'],这样更精准,避免误匹配其他类型的节点。匹配ID包含指定字符串的节点:用
*=符号。比如要匹配所有ID里包含item的节点:#*[id*='item'] { -fx-padding: 8px; -fx-font-size: 14px; }匹配ID以指定字符串结尾的节点:用
$=符号。比如要匹配所有ID以-container结尾的节点:#*[id$='-container'] { -fx-background-color: #f0f0f0; }
注意事项
- 匹配是区分大小写的:如果你的ID是
ID123,那[id^='id']是匹配不到的,必须写成[id^='ID']才能对应上。 - 这些选择器可以直接写在你的
.css样式文件里,和普通的JavaFX CSS一样加载使用,不需要额外的代码处理,完全靠样式规则就能批量匹配动态生成的ID节点。
举个实际的例子:假设你动态生成了一批Button,它们的ID分别是idBtn_01、idBtn_02、idBtn_03...,你想给它们统一设置样式,就可以在CSS里写:
Button[id^='idBtn_'] { -fx-text-fill: white; -fx-background-color: #2c3e50; -fx-border-radius: 4px; }
这样所有符合ID规则的Button都会自动应用这个样式,不用管具体有多少个节点。
内容的提问来源于stack exchange,提问作者c0der
相关产品推荐
相关产品推荐

