选择包含未解决的参考

选择包含未解决的参考

问题描述:

我有一个从TextField扩展的类。我将控件手动插入到fxml文件中,并包含一个导入语句。现在我看不到Scene Builder 2.0版中的控件。相反,我收到一条消息,指出:“选择包含未解决的参考”。我将如何去解决它们?选择包含未解决的参考

编辑:

我想我是不是说明在我的问题就清楚了。在我看来,我应该能够设置指向我的自定义控件类的类路径。一些网站如this一个告诉我选择一个名为的菜单条目解决未知类型。由于这个菜单项在我的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

你在使用哪个场景制作器?您是否在Scene Builder中导入了包含新控件的Jar? – ItachiUchiha 2014-12-02 10:01:53

+0

我使用的是场景生成器2.0,并且我在项目中定义了自定义控件,我想在其中使用它,因此不需要导入任何外部jar。 – Nessuno 2014-12-02 15:27:28

+0

即使它位于项目内部,Scene Builder也是一个外部工具,需要了解您已定义的新Custom控件。 – ItachiUchiha 2014-12-02 15:48:23

你缺少类路径中FXML分配的场景生成器回暖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?> 
+0

我正在使用IntelliJ,因此我正在使用''但这不能解决它。我也尝试添加或删除'../',但没有任何工作。 – Nessuno 2014-12-04 13:02:18

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