选择包含未解析的参考

时间:2014-11-24 20:17:41

标签: java javafx scenebuilder

我有一个从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>

3 个答案:

答案 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时,我遇到了同样的问题。对我来说,我只需关闭并重新打开场景构建器即可解决该问题。希望这对某人有帮助。