2012-11-26 119 views
20

我一直在檢查Oracle在JavaFX運行時庫中分發的「caspian.css」,並且我看到他們已經聲明瞭一些顏色值作爲變量。例如:在JavaFX CSS文件中聲明變量

-fx-base: #d0d0d0; // Caspian.css, Line 47 

......然後他們用它作爲一些其他財產的價值,如:

-fx-color: -fx-base; // Caspian.css, Line 96 

現在,我想要做的就是聲明一個測量單元(-fx-radius-default: 10px ),然後在每次需要設置控件的半徑時使用它,例如:

-fx-border-radius: -fx-radius-default; 
-fx-background-radius: -fx-radius-default; 

到目前爲止,我一直不成功。我的問題是:這完全可能嗎?


編輯:添加實驗細節

詳細

下面是我對JavaFX的場景Builder創建1.1我Experiment.fxml文件:

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

<?import java.lang.*?> 
<?import java.net.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <children> 
    <TextArea layoutX="200.0" layoutY="119.0" prefWidth="200.0" styleClass="track" wrapText="true" /> 
    </children> 
    <stylesheets> 
    <URL value="@css/Experiment.css" /> 
    </stylesheets> 
</AnchorPane> 

及以下是css/Experiment.css我已經使用:

* { 
    -fx-radius-default: 10px; 
} 
.track { 
    -fx-border-radius: -fx-radius-default; 
    -fx-border-color: black; 
} 

不幸的是,這並不工作,讓這樣的錯誤消息:

無法解析「-fx半徑默認」,而從規則解決了「-fx邊界半徑」查找'* .track' 在樣式表文件:/home/abdullah/codebase/src/package/css/Experiment.css

如果我使用普通語法(-fx-border-radius: 10px),有與沒有問題。

我在這裏做錯了什麼?


編輯:結論

結論:沒有可能

看來我要尋找什麼是不可能的JavaFX的當前版本,因爲「JavaFX CSS Reference Guide」只提到「looked-顏色「,而不是」變量「的通用概念。這將是一個很好的功能,雖然......只是說...

+0

我不知道實現起來是否簡單實用,但目前看起來像JavaFX的定義它們自己的CSS屬性的類使用'javafx.css.CssMetaData'類 –

回答

22

不幸的是,它似乎只適用於顏色。但是,你需要確保你的變量是「看得見」,從使用它的規則:

* { 
    -fx-base2: #e00; 
} 
.track {-fx-background-color: -fx-base2;} 
+0

我已經添加了一些細節給我你的答案後的問題。你可以檢查它嗎?謝謝。更新了 –

+0

,似乎只允許使用顏色常量。 –

+0

我也在[OTN JavaFX2論壇](https://forums.oracle.com/forums/message.jspa?messageID=10712718)上提出了同樣的問題。如果沒有人提供正面答案(或解決方法),我會接受你的答案。感謝回覆。如果你用較少和變量創建一個工作示例並將其上傳到github,那麼 –

5

我知道這是一個很古老的問題,但我無法找到一個類似的方法礦山任何回答。正如前面的答案已經表明,除了顏色之外,標準css是不可能的。(請糾正我,如果我錯了)

然而,它是可能的,如果您使用less。我在我的一個JavaFX項目中使用較少,並且它工作得很好。您只需配置您的構建過程即可編譯少量文件並生成實際的css文件。我在我的項目中使用了maven,在下面你可以找到我的構建配置。

<build> 
    <!-- exclude less files from output directory --> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.less</exclude> 
      </excludes> 
     </resource> 
    </resources> 

    <plugins> 

     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.2</version> 
     </plugin> 

     <plugin> 
      <groupId>com.zenjava</groupId> 
      <artifactId>javafx-maven-plugin</artifactId> 
      <version>8.7.0</version> 
      <configuration> 
       <mainClass>com.example.project.Main</mainClass> 
      </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.example.project.Main</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </plugin> 

     <!-- maven less plugin which I'm using to compile the less files --> 
     <plugin> 
      <groupId>biz.gabrys.maven.plugins</groupId> 
      <artifactId>lesscss-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <configuration> 
         <sourceDirectory>${project.basedir}/src/main/resources/com/example/project</sourceDirectory> 
         <outputDirectory>${project.build.outputDirectory}/com/example/project</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

有了這個配置,我現在可以少用了,定義自定義變量也沒有問題。我在我的項目中使用了color-catalogue.less文件,其他所有較少的文件都可以通過導入屬性導入。也許這個解決方案有助於任


編輯:如果有人有興趣,工作的例子可以發現here

+0

會很好。你怎麼看?謝謝 – Marckaraujo

+1

我已經更新了我的答案。 – grill2010