gpt4 book ai didi

css - 动态对象的 JavaFX 文本样式

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:51 24 4
gpt4 key购买 nike

我在 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 中并轻松访问它们?请注意,我正在创建许多这样的文本对象。

最佳答案

可以通过三种方式将 CSS 样式应用到 JavaFX 节点(或它们的组合):

  1. 正如 Tom 提到的,Node 的 css 样式类是通过 Node.getStyleClass() 访问的.这将返回一个 ObservableList,您可以在其中添加和删除样式类。
  2. 如果您经常更改节点样式,最好使用伪选择器,例如 :hover:active with Node.pseudoClassStateChanged() .
  3. 您已经发现了第三个选项 (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 {}

关于css - 动态对象的 JavaFX 文本样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com