Javafx 为默认皮肤设置css文件

Javafx 为默认皮肤设置css文件,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我基于caspian.css创建了css样式表。我的问题是如何将新的css外观加载为默认外观 以及如何在运行时更改外观?您可以直接将样式表添加到,也可以将样式表添加到任何节点,以将其应用于节点和所有Decentant。这两个类都有一个方法getStylesheets(),该方法返回一个,其中包含应用于对象的样式表的URLs。修改此列表 如果使用fxml,也可以在那里指定样式表(当然这只会设置初始样式表) 这是一个如何在创建场景时添加样式表的示例。当然,您可以随时从列表中删除样式表并添加另一个样式

我基于caspian.css创建了css样式表。我的问题是如何将新的css外观加载为默认外观


以及如何在运行时更改外观?

您可以直接将样式表添加到,也可以将样式表添加到任何节点,以将其应用于节点和所有Decentant。这两个类都有一个方法
getStylesheets()
,该方法返回一个,其中包含应用于对象的样式表的
URL
s。修改此列表

如果使用fxml,也可以在那里指定样式表(当然这只会设置初始样式表)

这是一个如何在创建场景时添加样式表的示例。当然,您可以随时从列表中删除样式表并添加另一个样式表
Style.css
是我想在这里添加的样式表,并添加到
a.b
包含样式表的包中

// Load some content from some fxml file; Style.css not added there
Parent parent = (Parent) fxmlLoader.load(
       getClass().getResourceAsStream("MainFrame.fxml"));

// create scene with content
Scene scene = new Scene(parent);
// alternatively use Node.getScene() for any node to get the scene    

// add the stylesheet
scene.getStylesheets().add(
           getClass().getClassLoader().getResource("a/b/Style.css").toString());
// ...
observeList
扩展了
java.util.List
,应该易于使用




请注意,行为有时可能与预期不完全一致。e、 g.如果单击组合框,则显示的弹出窗口不是组合框的中心,并且从这些节点到场景的根节点的路径应该只有共同的根节点。因此,如果将样式表添加到包含组合框的窗格中(如果该窗格不是场景的根节点),则不会设置弹出窗口的样式

下图包含带有样式化弹出窗口的组合框的屏幕截图。这只会起作用,因为css文件被添加到场景中,而不是包含组合框的锚烷。我使用不同的css类为项目着色。(红色的矩形和文本当然不是我申请的一部分)

这些是我使用的样式类

.indexed-cell.class-value-bad-1 {
    -fx-background-color: orange;
}

.indexed-cell.class-value-good-1 {
    -fx-background-color: forestgreen;
}

.indexed-cell.class-value-normal {
    -fx-background-color: white;
}

最后一件事。如何使用组合框并在运行时对其进行更改?@PeterPenzov:如果将样式表添加到场景中,即使是弹出窗口也没有问题(因为弹出窗口是场景的一部分,但不是fxml文件中的锚烷的后代)。您可以随时修改样式表列表,正如名称ObservableList所示,该列表应自动将更改应用于场景。