2012-11-26 84 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