Java FX 8 - TableViewオブジェクト内のオブジェクトを表示します
質問
マイケースクライアントオブジェクトのオブジェクトのリストから Tableview コンポーネントをロードしようとしています。クライアントオブジェクトには、アドレスオブジェクトとその逆も含まれています。 クライアントとアドレスオブジェクトは次のように定義されています。
public class Client{
private String firstName;
private String lastName;
private String emailAddress;
private String phoneNumber;
private Address clientsAddress;
public Client(){
//blah blah
}
//getters
...
//setters
...
}
public class Address{
//address lines + county
private String a1;
private String a2;
private String a3;
private String county;
private Client client;
public Address(){
//blah blah
}
//getters
...
//setters
...
}
.
クライアントのフィールドをクライアントオブジェクト内のフィールド名を列にマッピングするテーブルビューに表示することができます。
final TableView<Client> tableView = new TableView<>();
final TableColumn firstNameCol = new TableColumn("First Name");
final TableColumn lastNameCol = new TableColumn("Last Name");
final TableColumn emailCol = new TableColumn("Email Address");
final TableColumn addressCol1 = new TableColumn("Address Line 1");
final TableColumn addressCol2 = new TableColumn("Address Line 2");
firstNameCol.setMinWidth(90);
firstNameCol.setMaxWidth(110);
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
lastNameCol.setMinWidth(90);
lastNameCol.setMaxWidth(110);
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));
emailCol.setMinWidth(100);
emailCol.setMaxWidth(210);
emailCol.setCellValueFactory(new PropertyValueFactory<>("emailAddress"));
//Don't know how to access the Address Object inside Client Object in Next two parts
addressColumn1.setMinWidth(100);
addressColumn1.setMaxWidth(200);
addressColumn1.setCellValueFactory(new PropertyValueFactory<>(""));
adddessColumn2.setMinWidth(100);
addressColumn2.setMaxWidth(200);
addressColumn2.setCellValueFactory(new PropertyValueFactory<>(""));
tableView.getColumns().addAll(firstNameCol, lastNameCol, emailCol, addressColumn1, addressColumn2);
.
私の問題は、クライアントオブジェクト内のアドレスオブジェクトにアクセスする方法、またはアドレスオブジェクト内のフィールド名をテーブル列にマッピングする方法はあります。あらゆる助けがありがとうございました。
解決
チップをありがとう、私はクライアントオブジェクトにアクセスできる call メソッドを上書きすることによってそれを作動させました。その後、アドレスオブジェクトにアクセスして simpletringproperty を返し、各列を適切に更新することができました。
addressColumn1.setCellValueFactory(new Callback<CellDataFeatures<Client, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Client, String> c) {
return new SimpleStringProperty(c.getValue().getAddress().getA1());
}
});
. 所属していません StackOverflow