如何将我的自定义类正确导入此FXML文件?

时间:2017-07-17 20:03:13

标签: java javafx fxml scenebuilder

我正在制作一个简单的食谱应用程序来练习JavaFX并且我遇到了问题。我似乎无法导入这个类:

package application;

import javafx.beans.property.SimpleStringProperty;

public class Recipe {
   private final SimpleStringProperty Name = new SimpleStringProperty("");

   public Recipe() {
        this("");
    }

    public Recipe(String recipeName) {
        setRecipeName(recipeName);

    }

    public String getRecipeName() {
        return Name.get();
    }

    public void setRecipeName(String rName) {
        Name.set(rName);
    }

}

进入此FXML视图文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.cell.*?>
<?import javafx.collections.*?>
<?import fxmltableview.*?>
<?import java.lang.String?>
<?import application.Recipe ?>


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <TableView prefHeight="400.0" prefWidth="600.0">
        <columns>
          <TableColumn prefWidth="599.0" text="Column One" >
          <cellValueFactory><PropertyValueFactory property="Name" />
         </cellValueFactory>
          </TableColumn>
        </columns>
        <items>
    <FXCollections fx:factory="observableArrayList">
        <Recipe Name="Test Name"/>
    </FXCollections>
        </items>
      </TableView>
   </children>
</AnchorPane>

我一直收到错误。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

好吧,事实证明我无法将字段命名为“Name”,因为它显然是指FXCollections中的某些内容(我认为),因此我将我的属性更改为recipeName,这似乎解决了问题。

答案 1 :(得分:0)

Java中的属性名称由方法名称决定,而不是字段名称。由于您的Recipe类定义了方法getRecipeName()setRecipeName(...),因此属性名称为recipeName。因此你需要

 <Recipe recipeName="Test Name"/>

您可以将字段命名为您喜欢的名称 - 它不会影响属性名称的含义。但是,最好遵循standard naming conventions并使字段名称以小写字母开头。在JavaFX中定义属性访问器方法也很有用。这是一个例子:

public class Recipe {
   private final SimpleStringProperty name = new SimpleStringProperty("");

   public Recipe() {
        this("");
    }

    public Recipe(String recipeName) {
        setRecipeName(recipeName);

    }

    public String getRecipeName() {
        return name.get();
    }

    public void setRecipeName(String rName) {
        name.set(rName);
    }

    public StringProperty recipeNameProperty() {
        return name ;
    }

}