我使用FXML创建自定义组件。 自定义组件都设计在一个分层的方式。
当我设计一个使用另一种定义组件有一个自定义组件B,A类路径问题对话框中scenebuilder弹出,我只是通过设置相应的类路径解决这个问题。
然而,当我创建三个组成部分,说含含有C A B,并尝试打开Scenebuilder失败顶级组件℃。 它要求我要我正式指定的类路径。 它发现B,而没有找到A.
类路径,FXML和代码是正确的,因为应用程序能够正确执行。 只有Scenebuilder是有问题的。
一个人应该如何打开分层自定义组件与Scenebuilder?
成使用FXML分级部件定义的示例中的任何参考,将不胜感激并获得50分奖金。 (仅3个级别需要)
名叫大卫有人做了回答你的问题的论坛。 对于传统的目的,我在这里发布。
有在现场Builder中的类加载器自定义组件有问题。 当您加载SceneBuilder一个FXML文件:它使用其自己的类加载一个FXMLLoader。 为了加载它使用自己的FXMLLoader加载其它自定义组件自定义组件,就必须使所有FXMLLoader使用相同的类加载器。 当大卫在论坛上说,你可以在你的自定义组件添加该代码实现这一目标。
public class CustomC extends VBox {
public CustomC() {
init();
}
private void init() {
FXMLLoader loader = new FXMLLoader();
loader.setRoot(this);
loader.setLocation(this.getClass().getResource("CustomC.fxml"));
// Make sure to load "CustomC.fxml" with the same classloader that
// was used to load CustomC class.
loader.setClassLoader(this.getClass().getClassLoader());
try {
final Node root = (Node)loader.load();
assert root == this;
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
}
如果你想在一个类来外部这段代码,它把这个类在同一个罐子为您的自定义组件很重要:你不能把它放在一个外部JAR(至少目前如此)。
文章来源: Classpath resolution with hierarchical custom JavaFx components in Scenebuilder