我使用my program中的ListView
与许多风格Text
进行了对比。目前,我正在做这样的事情
case COMMENT:
t = new Text(lexer.comment.toString());
t.setStyle(BASE_STYLE + COMMENT_STYLE);
其中样式存储为java字符串。我的应用程序中有一个global.css
用于设置场景的一些静态节点,但对于以编程方式创建的文本,我不知道如何访问它。我尝试使用t.setId(..)
并在css文件中添加样式定义,但这不起作用。
有没有办法可以将我的不同文本类型的所有样式存储在一个css中并轻松访问它们?请注意,我创建了许多这些文本对象。
答案 0 :(得分:5)
将CSS样式应用于JavaFX节点(或它们的组合)有三种方法:
Node
的css样式类是通过Node.getStyleClass()
访问的。这将返回一个ObservableList,您可以在其中添加和删除样式类。:hover
或:active
和Node.pseudoClassStateChanged()
等伪选择器。setStyle()
),但我不喜欢这个选项,因为将CSS部分移动到单独的文件中会带来许多好处。对于#1和#2,您需要将样式表附加到场景/节点,其中包含Scene.getStylesheets()
或Parent.getStylesheets()
,其中存储了CSS定义。例如:
listView.getStylesheets().add(getClass().getResource("myStyles.css").toExternalForm());
#1的附加信息:
如果要将样式类my-node
添加到JavaFX节点:
node.getStyleClass().add("my-node");
现在您可以在CSS文件中设置该节点的样式:
.my-node {}
#2的附加信息:
您可以使用
声明和使用自己的伪类PseudoClass comment = PseudoClass.getPseudoClass("comment");
node.pseudoClassStateChanged(comment, true);
node.pseudoClassStateChanged(comment, false);
在你的css文件中:
.my-node:comment {}