JavaFX动态对象的文本样式

hal*_*tan 0 css javafx

ListView我的程序中使用了许多很多样式Text的程序.目前,我正在做这样的事情

case COMMENT:
  t = new Text(lexer.comment.toString());
  t.setStyle(BASE_STYLE + COMMENT_STYLE);
Run Code Online (Sandbox Code Playgroud)

样式存储为java字符串.我的global.css应用程序中有一个用于为场景的某些静态节点设置样式,但对于以编程方式创建的文本,我不知道如何访问它.我尝试使用t.setId(..)并在css文件中放置样式定义,但这不起作用.

有没有办法可以将我的不同文本类型的所有样式存储在一个CSS中并轻松访问它们?请注意,我正在创建许多这些文本对象.

eck*_*kig 5

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

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

对于#1和#2,您需要将样式表附加到场景/节点,使用Scene.getStylesheets()Parent.getStylesheets()存储CSS定义.例如:

listView.getStylesheets().add(getClass().getResource("myStyles.css").toExternalForm());
Run Code Online (Sandbox Code Playgroud)

#1的附加信息:

如果要将样式类添加my-node到JavaFX节点:

node.getStyleClass().add("my-node");
Run Code Online (Sandbox Code Playgroud)

现在您可以在CSS文件中设置该节点的样式:

.my-node {}
Run Code Online (Sandbox Code Playgroud)

#2的附加信息:

您可以声明并使用自己的伪类

PseudoClass comment = PseudoClass.getPseudoClass("comment");
node.pseudoClassStateChanged(comment, true);
node.pseudoClassStateChanged(comment, false);
Run Code Online (Sandbox Code Playgroud)

在你的css文件中:

.my-node:comment {}
Run Code Online (Sandbox Code Playgroud)