我试图用
JavaFX和SceneBuilder 1.1进行自定义控件.
我有这个代码:
FXML
<?import libreria.javaFX.componentes.componenteTextField.*?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> <children> <CustomComponent fx:id="pastaTxt" layoutX="69.0" layoutY="87.0" prefWidth="200.0" /> </children> </AnchorPane>
CustomComponent.java
package libreria.javaFX.componentes.componenteTextField; import javafx.scene.control.TextField; public class CustomComponent extends TextField { public CustomComponent() { super(); // TODO Auto-generated constructor stub } public CustomComponent(String arg0) { super(arg0); // TODO Auto-generated constructor stub }
}
当我尝试从SceneBuilder打开它,它告诉我:
Missing types are: [CustomComponent]
并且它让我有机会指定Classpath(也不解决问题).
我试着把类放在import语句上,就像这样:
<?import libreria.javaFX.componentes.componenteTextField.CustomComponent?>
但它会给出一个ClassNotFoundException.
有什么想法为什么会发生这种情况?
更多信息
我刚刚完成了一个新项目:
代码如下:
CustomControl.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import custom.CustomControl?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.paint.*?> <?scenebuilder-classpath-element ../../bin/custom?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> <children> <CustomControl layoutX="51.0" layoutY="100.0" prefWidth="200.0" /> </children> </AnchorPane>
CustomControl.java
package custom; import javafx.scene.control.TextField; public class CustomControl extends TextField { public CustomControl() { super(); } public CustomControl(String arg0) { super(arg0); } }
我还有同样的问题.我用对话框指定了类路径,一切似乎对我来说,但是我打开SceneBuilder时也有同样的错误.
最近的信息
试图接近解决方案,我们在Eclipse下尝试了这个项目.结果是Eclipse显示窗口可以,但SceneBuilder继续这些错误.我希望这个线索有帮助.
如果有人在Scene Builder下完成了这种定制控件定义,请告诉我们,给我们一个例子,这对我们的项目来说是非常有帮助的.
解决方法
这是由于不指定正确的类路径,这允许运行Java运行场景构建器加载控件类.
如果你正在运行eclipse并且你的类有命名空间custom.MyControl然后指定bin目录而不是自定义目录.在maven项目中,您需要指定目标/类目录.