【发布时间】:2013-05-21 15:10:26
【问题描述】:
我正在尝试使用 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 打开它时,它告诉我:
缺少的类型是:[CustomComponent]
它让我有机会指定类路径(这也不能解决问题)。
我也尝试将类放在 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下做过这种自定义控件定义,请告诉我们并举个例子,对我们的项目非常有帮助。
【问题讨论】:
-
使用场景构建器对话框添加路径绝对有效。当被问到时,您在哪里指定类路径?如果您使用的是 eclipse,它需要是 bin 目录。
-
是的,我在编译项目后指定了 bin 目录。但它对我不起作用......我有它如下:
-
阅读 java 类路径可能是个好主意。如果您有一个具有命名空间 libreria.MyComponent 的类,那么您需要添加 libreria 的父目录而不是完整路径。尝试 虽然我总是使用对话框。
-
我实际使用过对话框。似乎一切正常,但 SceneBuilder 没有在层次面板上显示自定义组件,无论我指定它还是类路径,导入都不起作用。我已经尝试过您建议的方式,结果相同...
-
我能想到的就是相对路径不正确。
标签: custom-controls javafx-2 javafx fxml scenebuilder