如何使用css文件将jar文件导入场景生成器? (css文件不适用)

时间:2016-12-27 00:15:09

标签: javafx jar scenebuilder

我开发了自定义按钮控件。代码很简单。我只是创建了MyButton类的扩展Button类。我在同一个文件中添加了css。像这样

public class PrimaryButton extends Button {
public PrimaryButton(){
    getStyleClass().add("primary-button");
    getStylesheets().add("primarybutton.css");
   }
}

我的项目结构是this.

我将这个项目文件设为jar。然后我将这个jar导入到场景构建器中。但css不适用。 like this。有什么问题?

2 个答案:

答案 0 :(得分:0)

我认为问题出在您的CSS文件路径中,当我将其更改为

getStylesheets().add("sample/primarybutton.css");

它工作正常,这也很好

getStylesheets().add("/sample/primarybutton.css");
  

注意:我的应用程序架构与您的完全相同

这里是完整的样本

public class MyButton extends Button {
public MyButton(){
    getStylesheets().add("sample/primarybutton.css");
    //you can also use this
    //getStylesheets().add("/sample/primarybutton.css");
    getStyleClass().add("primary-button");
} }
  

注意:"主要按钮"是你的" primarybutton.css"中的一个css类。文件

希望这很有用,并解决您的问题

答案 1 :(得分:0)

传递给样式表列表的字符串被视为URL。 documentation州:

  

URL是[scheme:] [// authority] [path]形式的分层URI。   如果URL没有[scheme:]组件,则会考虑URL   仅作为[path]组件。任何领先的'/'字符   [path]被忽略,[path]被视为相对于的路径   应用程序类路径的根。

由于类和样式表都在sample包中,因此样式表相对于类路径的URL为sample/primarybutton.css,因此您可以使用

getStylesheets().add("sample/primarybutton.css");

如果你想利用样式表与类在同一个包中的事实,并使代码更具可移植性(即不对包名称进行硬编码),你可以从当前创建一个完整的URL class,然后将其转换为字符串:

getStylesheets().add(getClass().getResource("primarybutton.css").toExternalForm());

这是有效的,因为getClass().getResource(...)创建了一个URL,其中资源名称(如果它不以前导/开头)被解释为相对于当前类。

我通常更喜欢后一种方法,但其他人可能不同意。