2014-01-08 159 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

最後一件事。我如何使用組合框做到這一點,並在運行時更改它? –