JavaFX动态对象的文本样式

时间:2014-12-22 05:41:36

标签: css javafx

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

1 个答案:

答案 0 :(得分:5)

将CSS样式应用于JavaFX节点(或它们的组合)有三种方法:

  1. 正如Tom所说,Node的css样式类是通过Node.getStyleClass()访问的。这将返回一个ObservableList,您可以在其中添加和删除样式类。
  2. 如果您经常更改节点样式,最好使用:hover:activeNode.pseudoClassStateChanged()等伪选择器。
  3. 您已经发现的第三个选项(setStyle()),但我不喜欢这个选项,因为将CSS部分移动到单独的文件中会带来许多好处。

  4. 对于#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 {}