我有一个从TextField扩展的类。我手动将控件插入到fxml文件中并包含一个import语句。现在我看不到Scene Builder 2.0版中的控件。相反,我得到一条消息说:“选择包含未解析的引用”。我将如何解决这些问题?
编辑:
我想我不清楚我的问题在哪里。在我看来,我应该能够设置指向我的自定义控件的类的类路径。像this这样的网站告诉我选择一个名为Resolve Unknown Types的菜单条目。由于这个菜单项在我的Scene Builder版本中不存在,我认为必须存在一些解决这类问题的新机制。这就是我在问题中如此含糊的原因。事后看来,这可能不是一个好主意。
focused text field.Java:
package de.foo.bar.gui;
import javafx.beans.property.StringProperty;
import javafx.scene.control.TextField;
public class FocusedTextField extends TextField{
public void setStringProperty(StringProperty stringProperty){
focusedProperty().addListener((observable, oldValue, newValue) ->
stringProperty.setValue(getText()));
}
}
摘自FooDialog.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import de.foo.bar.gui.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane>
<children>
<FocusedTextField fx:id="fooField" />
<FocusedTextField fx:id="barField" />
</children>
</AnchorPane>
当我将标题部分xml复制到另一个fxml布局文件时,我遇到了同样的问题。但是当我与import语句一起复制时,它已被清除..现在,场景构建器在其他源编辑后显示布局文件。
您缺少fxml中类路径的赋值,以便Scene Builder获取Class文件。如果您使用的是Eclipse,那么类路径将指向您的bin
目录。
FooDialog.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import custom.*?>
<?import custom.FocusedTextField?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?scenebuilder-classpath-element ../../bin?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<children>
<FocusedTextField fx:id="fooField" />
<FocusedTextField fx:id="barField" />
</children>
</AnchorPane>
focused text field.Java
package custom;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TextField;
public class FocusedTextField extends TextField {
public void setStringProperty(final StringProperty stringProperty) {
focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable,
Boolean oldValue, Boolean newValue) {
stringProperty
.setValue(getText());
}
});
}
}
在您的情况下,您可以使用所需的包。请记住,classpath是一个相对路径,所以如果你的fxml在src / de / foo / bar / gui / FooDialog.fxml中。那么类路径就是
<?scenebuilder-classpath-element ../../../../../bin?>