2015-05-04 48 views
0

我已經谷歌有點沒有答案。在FXML中,我知道如何使用styleClassstyle標籤來引用CSS,樣式等。我想知道是否可以引用單個css變量adhoc。FXML引用CSS變量

舉例來說,如果我想設置一個窗格的填充是有可能實現以下,或者類似的東西:

example.css

/* ---------- Constants ---------- */ 
*{ 
    margin_small: 1.0em; 
    margin_large: 2.0em; 
} 

例如FXML

<padding> 
    <Insets bottom="margin_small" left="margin_small" right="margin_small" top="margin_large" /> 
</padding> 

另一種方法是爲每個組合使用一種css風格或者使用style標記引用它們。我寧願避免這兩種選擇。

這可能嗎?

+0

你不能做你正在嘗試樣品中做代碼在你的問題。也許這裏的信息將有所幫助:[在FXML中通過表達式綁定使用em單元](http://stackoverflow.com/a/23706030/1155209),但我不確定,因爲你沒有[解釋你嘗試的問題是什麼解決是](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – jewelsea

+0

感謝您的回覆。沒有一個具體的問題,我只是想利用一個全局變量來處理邊界等事情。由於fxml負責佈局,將這些常量或邏輯放在控制器中會很麻煩。我基本上想要做的是在android的xml中可以引用值文件。但在javafx中,它將是css而不是值 – Kevin

+0

最後決定爲每個我想參考的常量創建一個帶有屬性的POJO。然後在每個FXML文件中定義一個POJO的實例並以這種方式引用它們。沒有我想要的那麼整齊,但仍然比在每個控制器中都好。並且比硬編碼更好 – Kevin

回答

0

我無法得到我真正想要的解決方案,我希望能夠直接包含文件(fxml,css,values等)和引用。我能做的最好的事情是爲每個常量創建一個帶有屬性的POJO,然後在fxml中定義一個POJO實例。

這樣做的問題是每個fxml都會創建一個類的新實例,這看起來有點浪費,因爲常量本質上是靜態的。

以下是我所做的:

FXMLConstants.java

// Class instance containing global variables to be referenced in fxml files. This is to allow us to use constants similarly to how Android's xml structure does 
public class FXMLConstants 
{ 
    private static final DoubleProperty marginSmall = new SimpleDoubleProperty(10); 
    private static final DoubleProperty marginMedium = new SimpleDoubleProperty(15); 
    private static final DoubleProperty marginLarge = new SimpleDoubleProperty(25); 

    public Double getMarginSmall() 
    { 
     return marginSmall.getValue(); 
    } 

    public Double getMarginMedium() 
    { 
     return marginMedium.getValue(); 
    } 

    public Double getMarginLarge() 
    { 
     return marginLarge.getValue(); 
    } 
} 

Example.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.net.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.text.*?> 
<?import com.example.FXMLConstants?> 

<GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 

    <fx:define> 
     <FXMLConstants fx:id="fxmlConsts" /> 
    </fx:define> 

    <padding> 
     <Insets bottom="$fxmlConsts.marginMedium" left="$fxmlConsts.marginLarge" right="$fxmlConsts.marginLarge" top="$fxmlConsts.marginMedium" /> 
    </padding> 

    <children> 
     <Label text="Test" GridPane.columnIndex="0" GridPane.rowIndex="0" /> 
    </children> 
</GridPane>