声明变量在JavaFX CSS文件(Declaring Variable In JavaFX CSS

2019-07-04 03:18发布

我一直在检查“caspian.css”被Oracle JavaFX运行库分布,我看到他们已经宣布了一些颜色值的变量。 例如:

-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的场景生成器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参考指南 ”,只提到“查到的颜色”,而不是“变量”的一般概念。 这将是一个很好的功能,但...只是说...

Answer 1:

不幸的是,似乎只为颜色工作。 但是,你需要确保你的变量是“看得见”,从使用它的规则:

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


Answer 2:

我知道这是一个很古老的问题,但我无法找到一个类似的方法矿山任何回答。 正如前面已经回答说,这是不可能的,除了颜色标准的CSS。 (请纠正我,如果我错了)

然而,这是可能的,如果你使用较少 。 我在JavaFX的项目之一,使用更少的和它的作品真的很好。 你只需要配置您的构建过程编译较少文件,并生成实际的CSS文件。 我用行家在我的项目,下面你可以找到我的构建配置。

<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>

有了这个配置我现在可以使用更少的和没有问题定义自定义变量。 我在我的项目,所有其他不太文件可以通过进口导入属性使用颜色catalogue.less文件。 也许这个解决方案可帮助任何人。


编辑 :如果有人有兴趣,工作的例子可以找到这里 。



Answer 3:

只要稍微修正你的答案:它是用数字,不仅颜色也是可能的。

例如:

*{
    -preferred-scroll-bar-thumb-size: 25;
}

.scroll-bar:vertical .thumb {
    -fx-pref-width: -preferred-scroll-bar-thumb-size;
}

作品对我来说,和JavaFX,取值为“25”为“25像素”(如果我写了“25像素”,它会失败)。 它不完全变量使用以下/上海社会科学院但它可以帮助不需要比这更多的人。



Answer 4:

在插件的grill2010的解决方案 :
我建议在“生成资源”阶段使用SCSS与Maven的建设者(插件)到CSS。 因此,您可以使用任何数字或颜色的任何选择的变量。

我使用的这个场景,并能正常工作:)

PS你不能这样做,直接在当前的OpenJFX版本的CSS文件。

           <plugins>
                <plugin>
                <groupId>com.github.warmuuh</groupId>
                <artifactId>libsass-maven-plugin</artifactId>
                <version>0.2.10-libsass_3.5.3</version>
                <executions>
                    <execution>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <outputPath>${project.build.directory}/generated-sources/resources</outputPath>
                    <inputPath>${basedir}/src/main/resources</inputPath>
                    <!--<includePath>${basedir}/src/sass-plugins/</includePath>-->
                    <outputStyle>nested</outputStyle>
                    <generateSourceComments>false</generateSourceComments>
                    <generateSourceMap>false</generateSourceMap>
                    <sourceMapOutputPath>${project.build.directory}/generated-sources/resources
                    </sourceMapOutputPath>
                    <omitSourceMapingURL>true</omitSourceMapingURL>
                    <embedSourceMapInCSS>false</embedSourceMapInCSS>
                    <embedSourceContentsInSourceMap>false</embedSourceContentsInSourceMap>
                    <precision>5</precision>
                    <enableClasspathAwareImporter>true</enableClasspathAwareImporter>
                    <copySourceToOutput>false</copySourceToOutput>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/generated-sources/resources</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>


文章来源: Declaring Variable In JavaFX CSS File
标签: css javafx-2