我在JavaFX中开发一个应用程序。现在我遇到了问题,我想在编译时生成错误,如果是css类,例如对于一个按钮,如果在代码中设置了相应的css文件中不存在。
示例:
main.java
String sCSS = this.getClass().getResource("/main.css").toExternalForm();
scene.getStylesheets().add(sCSS);
Button btn = new Button("Hello JFXWorld...");
btn.getStyleClass().add("button"); // should show compile time error
的main.css
.buttonWithWrongName {
-fx-background-color: red; }
我的解决方案如下,但我正在寻找建议如何实现它。
我包含一个预处理器或创建一个新项目或类似的东西,它解析css代码并动态生成枚举(到.jar中)。这个罐子我可以加入到我的项目中。在最好的情况下,如果没有使用预处理器,ant会自动触发枚举的构建。
再次示例:
Css文件与上面相同。
{ 在这里为css文件做预处理程序的东西(解析并创建枚举)并将其构建到jar文件中。 }
main.java
String sCSS = this.getClass().getResource("/main.css").toExternalForm();
scene.getStylesheets().add(sCSS);
Button btn = new Button("Hello JFXWorld...");
// will throw an compile time error becaus the eMainCSS enum only contains the class ".buttonWithWrongName"
btn.getStyleClass().add(eMainCSS.button.toString());
// works fine
btn.getStyleClass().add(eMainCSS.buttonWithWrongName.toString());
我正在使用Eclipse(Neon)和JDK 1.8.0。 我希望有一个解决方案。
感谢您的回答。
最诚挚的问候,
Max S.
- 编辑 -
我使用Ant WatchTask来监视项目中所有较少的文件。 如果我在less文件中更改了某些内容,则ant将运行一个自编写的jar文件,其文件名为参数。 jar将较少的文件转换为css文件(带有less4j),将css文件转换为包含枚举的java文件(我自己的解析器)。
注意:您re not allowed to change anything in the enum. Even if you do, after the next changes in the less file, it
将会离开。
结果如下所示:
Stylesheet.less:
.button { -fx-stroke-width: (1 + 1); }
#anotherButton { -fx-stroke-width: (1 + 2); }
到 Stylesheet.css:
.button { -fx-stroke-width: 2; }
#anotherButton { -fx-stroke-width: 3; }
到 Stylesheet.java:
// Auto-generated java file
public enum Stylesheet {
C_BUTTON("button"),
ID_ANOTHERBUTTON("anotherButton");
private final String sValue;
Stylesheet(String sValue) {
this.sValue = sValue;
}
@Override
public String toString() {
return this.sValue;
}
}
如果我在javafx中使用的类或id不存在,编译器将在编译时抛出错误。
最诚挚的问候,
Max S.