我开发了自定义按钮控件。代码很简单。我只是创建了MyButton类的扩展Button类。我在同一个文件中添加了css。像这样
public class PrimaryButton extends Button {
public PrimaryButton(){
getStyleClass().add("primary-button");
getStylesheets().add("primarybutton.css");
}
}
我的项目结构是this.
我将这个项目文件设为jar。然后我将这个jar导入到场景构建器中。但css不适用。 like this。有什么问题?
答案 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,其中资源名称(如果它不以前导/
开头)被解释为相对于当前类。
我通常更喜欢后一种方法,但其他人可能不同意。