2017-07-17 7 views
1

私はJavaFXを練習するための簡単な料理ブックアプリを作っています。問題にぶつかっています。私はこのクラスをインポートするように見えることはできません。カスタムクラスをこのFXMLファイルに正しくインポートするにはどうすればよいですか?

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> 

私はライン上のエラーを取得しておきます。どんな助けでも大歓迎です。

+0

こんにちは、 私はそれがあなたの問題を修正した場合(私はないと思う、SRY)、知っているが、あなたの変数を命名していない「名前」(最初の文字大文字)が悪いと考えられていますコンパイラによって誤解される可能性があります。 (少なくとも私が知っている限り...) – GoatyGuy

+0

ええ、それは本当に私を助けてくれませんでしたが、あなたは正しいと私はrecipeNameに変更しました。これはより明確ですが、それは機能する。編集:それは命名規則ではありませんでした。名前は明らかに何かの予約フィールドを参照していますが、わかりませんが、今は動作します。 – JLH

答えて

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 ; 
    } 

} 
0

さて、FXCollections(私は思う)のものを明示的に参照しているので、 "Name"フィールドに名前を付けることはできませんので、プロパティをrecipeNameに変更して問題を解決するようです。

+0

A like like nice;) – GoatyGuy

+0

これはまったく問題ではありません。問題は、クラスのプロパティ名が( 'getRecipeName'と' setRecipeName'メソッドを持っているので) 'recipeName'ですが、FXMLでは' Name'というプロパティを参照しようとしています(FXMLLoaderは存在しない 'setName'と呼ばれるメソッドを見つけます)。 –

関連する問題