选择包含未解析的参考

问题描述 投票:0回答:2

我有一个从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>
java javafx scenebuilder
2个回答
1
投票

当我将标题部分xml复制到另一个fxml布局文件时,我遇到了同样的问题。但是当我与import语句一起复制时,它已被清除..现在,场景构建器在其他源编辑后显示布局文件。


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>

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?>
© www.soinside.com 2019 - 2024. All rights reserved.