2014-01-08 123 views

回答

1

您可以将样式表直接添加到Scene或任何Parent以将其应用于节点和所有后继者。这两个类都有一个方法getStylesheets(),返回ObservableList<java.lang.String>,其中包含应用于对象的样式表的URL。修改此列表!

如果你使用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()); 
// ... 

ObservableList<T>延伸java.util.List<T>,应该很容易使用。




请注意,行为有时可能不像预期的那样。例如弹出窗口显示,如果单击组合框不是组合框的后代,并且从这些节点到场景的根节点的路径应该只有根节点共同。因此,如果将样式表添加到包含组合框的窗格(如果这不是场景的根节点),则不会弹出窗口样式。

以下图片包含带有样式化弹出框的组合框的屏幕截图。这只适用于,因为css文件被添加到场景中而不是包含组合框的AnchorPane。我使用不同的CSS类来为它们着色。 (红色矩形和文字不是我当然是应用程序的一部分)

Combobox Popup

这些样式类,我用

.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; 
} 
+0

任何代码示例吗? –

+0

@PeterPenzov:添加代码示例。希望这是帮助。 – fabian

+0

最后一件事。我如何使用组合框做到这一点,并在运行时更改它? –