如何设置将JavaFX控件导入Scene Builder?
我有一个JavaFX控件,基本上是其他几个JavaFX控件的合并。如何设置将JavaFX控件导入Scene Builder?
我希望它可以导入.jar文件到场景生成器,以便它可以像任何其他控件一样使用。我能想到的最接近的比喻是,当你在C#中定制控件时,在几个项目中多次使用它。
当我尝试导入FXML文件时,它不起作用。该控件不被视为一个单独的实体,而是基本上只是它在FXML文件中串联的所有部分。
我需要怎样处理FXML文件或controller.java文件,以便场景生成器能够导入.jar,查看控件并允许导入并使用每个控件自定义控件作为单个实体?我查了几个地方,甚至在Stack Overflow之前询问了一次(尽管我得到的答案不是我正在查找的答案,并且从那时起没有收到任何答复),但是我没有看到任何答案接近处理我的问题。
我来最接近与该线路FXML文件来完成:
<?scenebuilder-classpath-element /path/to/something?>
,但我不知道在/path/to/something
发生的事情,我知道我可以,在初始化,只需将控制权添加到场景中,但这是次优的,而我正在拼命试图避免的。
我终于能够解决这个问题。经过多次试验和错误,并遵循here的示例代码,我发现我的问题是每个FXML控件组需要2个类。 一个是组的实际控制者,另一个是容纳控制器的对象。我遵循解锁示例中的代码,这对我来说是天赐之物。 基本上可以归结为两个文件:
的对象(继承根节点的类型,在我的情况):
public class <InsertObjectClassNameHere> extends <RootContainerTypeHere>{
}
这之后您需要的控制器类。这是我最熟悉的事情,但我仍然在做错事。这是需要implement initializable
:
public class <InsertControllerClassNameHere> implements Initializable{
}
所以对我来说Object类看起来是这样的:
public class DGCSDefiner extends GridPane {
private final DGCSDefinerController Controller;
public DGCSDefiner(){
this.Controller = this.Load();
}
private DGCSDefinerController Load(){
final FXMLLoader loader = new FXMLLoader();
loader.setRoot(this);
loader.setClassLoader(this.getClass().getClassLoader());
loader.setLocation(this.getClass().getResource("DGCSDefiner.fxml"));
try{
final Object root = loader.load();
assert root == this;
} catch(IOException ex){
throw new IllegalStateException(ex);
}
final DGCSDefinerController cntrlr = loader.getController();
assert cntrlr != null;
return cntrlr;
}
/**
* Get the settings defined by the controller.
* @return controller defined settings.
*/
public ColorSettings getColorSettings(){
return this.Controller.getColorSettings();
}
/**
* Set the controllers color settings.
* @param CS Defined color settings.
*/
public void setColorSettings(ColorSettings CS){
this.Controller.setColorSettings(CS);
}
}
,然后有实际控制类。
因此,对于一个直接的答案,
,你需要有一个类,将被载入你的控制器,你需要从你的控制器向下传递给类,它使用您将工作(或者,您可以简单地将控制器公开并直接访问它)。
你见过这个问题吗? http:// stackoverflow。com/questions/19342259/how-to-create-multiple-javafx-controllers-with-different-fxml-files Rafael – 2014-09-05 17:58:22
我明白他们在做什么,从观察代码,只要我能告诉唯一的我错过的是在FXML中声明控制器(现在我已经通过Scene Builder完成)。 我编译了.jar,并试图再次导入它。我什么也没得到。它打开了罐子,并没有给我任何进口。所以虽然这帮助我发现我没有宣布控制器,但它仍然无法帮助我解决我的问题。谢谢你。 – Will 2014-09-05 18:28:15
然后,检查出来 http://stackoverflow.com/questions/16673407/javafx-custom-control-textfield-not-working – 2014-09-05 19:05:03