在JavaFX中发出加载样式表

时间:2014-10-22 14:07:01

标签: java css javafx-8

我正在使用OpenJDK 8u20和OpenJFX 8u5在Linux上开发应用程序。我基本上试图为所有场景设置默认样式表。显然没有一个受制裁的方法,所以解决方法是为每个场景设置样式表。执行此操作的方法是“scene.getStylesheets()。add(css)”其中css是表示样式表位置的String。该表示可以有三种形式:文件,URL或资源。

URL方法的一个示例是:

String css = "http://localhost/file.css";

文件方法的一个例子是:

String css = "file://" + new File("file.css").getAbsolutePath().replace("\\", "/");

资源的一个例子是:

String css = this.getClass().getResource("file.css").toString();

在这三者中,只有URL方法似乎与广告一样有效。

文件方法似乎最初起作用,但后续编译似乎打破了它。我可以看到正在使用正确的值调用“scene.getStylesheets()。add(css)”,但应用程序的运行方式就好像从未如此。它只能在我编辑我正在添加样式表的文件的编译之后工作。如果我编辑任何其他文件,编译并运行它不起作用。

资源方法只会引发运行时异常,即“sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)”。

我现在通过使用URL方法解决了一些问题,但从长远来看,我真的希望能够将这个CSS文件打包到jar中并从jar中使用它。有人有任何想法或建议吗?

2 个答案:

答案 0 :(得分:0)

好的,显然我并不了解资源方法应该如何充分发挥作用。我在一个临时目录中编译类文件,我也没有将资源文件复制到该目录。一旦我做了那个getResource开始工作。所以现在URL和资源方法都适用于我。

如果有人想对文件方法的奇怪行为发表评论,那么了解它的用途会很好。

答案 1 :(得分:0)

有一种方法可以为所有场景设置默认的CSS样式表,您可以通过在JavaFx应用程序上调用静态setUserAgentStyleSheet()方法来实现这一点。