我有一个从TextField扩展的类。我手动将控件插入到fxml文件中并包含一个import语句。现在我看不到Scene Builder 2.0版中的控件。相反,我得到一条消息说:“选择包含未解析的引用”。我将如何解决这些问题?
修改
我想我不清楚我的问题在哪里。在我看来,我应该能够设置指向我的自定义控件的类的类路径。像this这样的网站告诉我选择一个名为 Resolve Unknown Types 的菜单条目。由于这个菜单项不存在在我的Scene Builder版本中,我认为必须存在一些解决这类问题的新机制。这就是我在问题中如此含糊的原因。事后看来,这可能不是一个好主意。
FocusedTextField.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>
答案 0 :(得分:1)
当我将标题部分xml复制到另一个fxml布局文件时,我遇到了同样的问题。 但当我与import语句一起复制时,它被清除了.. 现在,场景构建器在其他来源编辑后显示布局文件。
答案 1 :(得分:0)
您缺少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>
<强> FocusedTextField.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?>
答案 2 :(得分:0)
实际上,当我将XML从一个xml文件复制到另一个xml时,我遇到了同样的问题。对我来说,我只需关闭并重新打开场景构建器即可解决该问题。希望这对某人有帮助。