2016-12-27 21 views
0

我开发自定义按钮控件。代码非常简单。我只是创建MyButton类扩展Button类。我在同一个文件中添加css。这样如何用css文件将jar文件导入场景生成器? (css文件不适用)

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

我的项目结构this.

我做了这个项目文件罐子。然后我将这个jar导入场景构建器。但css剂量不适用。 like this。哪里不对?

回答

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"); 
} } 

注: “主键” 是一个CSS类在 “primarybutton.css” 文件

希望这是有用的,解决你的问题

+0

谢谢你的回答。但我试过这种方式,我无法解决问题。 – rlawlstjd007

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,然后将其转换为字符串:

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

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

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

+0

'toExternalForm()'是什么意思? – rlawlstjd007

+0

它将URL转换为外部表单,即转换为不依赖于上下文的表单。 –

+0

谢谢,太棒了! – rlawlstjd007