2013-05-04 12 views
6

私はTableViewでテーブルを作成し、Userオブジェクトのリストに基づいてプログラムで入力しようとしています。 Userには、nameProperty(String)、rankProperty(Rankと呼ばれる列挙型)、およびnetMeritsProperty(int)という3つの変数があります。これらはすべてSimpleStringPropertyオブジェクトに格納されています。私の問題は、ここに示すように、データは、実際のテーブルに表示されないということです。ここでPropertyValueFactoryを正しく使用するには?

は、テーブルのための私のコードです。私は何を理解していないのですか?

TableColumn<User, String> name = new TableColumn<>("Name"); 
name.setCellValueFactory(new PropertyValueFactory<User, String>("nameProperty")); 

TableColumn<User, String> rank = new TableColumn<>("Rank"); 
rank.setCellValueFactory(new PropertyValueFactory<User, String>("rankProperty")); 

TableColumn<User, String> netMerits = new TableColumn<>("Net Merits"); 
netMerits.setCellValueFactory(new PropertyValueFactory<User, String>("netMeritsProperty")); 

userTable.getColumns().addAll(name, rank, netMerits); 
+0

この文書はお役に立ちますか? http://docs.oracle.com/javafx/2/ui_controls/table-view.htm –

+1

おそらく、 "nameProperty"などの最後に "Property"を追加する必要はありませんか? –

+0

またはTableViewにデータを入力していない –

答えて

14

答えは、あなたがPropertyValueFactoryのパラメータとして与え、その方法は、お使いのカプセル化されたデータ型に実装されている文字列の内容、注意についてです。

インスタンス:

new PropertyValueFactory<User, String>("name") 

がためにルックアップします:PropertyValueFactoryを使用して

User.nameProperty() 
+0

アレクサンダーどこかでこの1つについて読んだけどリンクを見つけることができません。あなたはこれを読んだところからリンクしていますか?そのプロパティがどのように動作するか完全なガイドがあったからです。コンパイラがnamePeropty()を見つけた場合、これは他のものを呼び出すでしょう。そうでなければ、getName()を呼び出します。 – UnKnown

11

はシンプルですが、それは誰にでもありません。

おそらくPropertyValueFactoryを使用する単一の最も厄介なことは、あなたが提供する引数がSTRICT慣例に従ってあなたのJavaFX Beanのプロパティの名前と一致しなければならないということである。

  1. あなたが単語「プロパティ」を含めることはできません
  2. マッチングは大文字と小文字が区別され、「FIRSTNAME」は「firstNameの」

として認識されないよう、最善の方法は、あなたのJavaFXのビーン定義ブロックを見て、あなたの財産のラインを見つけることです。プロパティの名前を取って、 "プロパティ"である部分を省略し、それを正確に(同じ場合に)PropertyValueFactoryに渡す文字列にコピーします。最後の行、「firstNameProperty」内のプロパティの名前で

public final String getFirstName() { return this.m_firstname.get(); } 
public final void setFirstName(String v) { this.m_firstname.set(v); } 
public final StringProperty firstNameProperty() { return m_firstname; } 

ルック:たとえば

は、あなたがこのJavaFXのBean定義を持っていると言います。 "Property"を省略し、結果の文字列はPropertyValueFactoryのString引数として-exactly-を使用する必要があります。 "ファーストネーム"。

tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName")); 
関連する問題