2014-07-29 2 views
2

Я пытаюсь загрузить компонент Tableview из списка объектов, в моем случае объектов клиента. Клиентский объект содержит Адрес Объект и наоборот. Клиент и адресный объект определяются следующим образом;Java FX 8 - Объекты отображения таблицы в объектах

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

Моя проблема в том, однако, есть ли способ доступа к объекту адреса внутри объекта клиента, или какой-либо способ отображения имени поля в адрес объекта в столбце таблицы. Любая помощь будет оценена, спасибо.

+2

afaik, нет встроенной поддержки путей привязки - вам необходимо реализовать пользовательское значениеFactory. – kleopatra

ответ

2

Спасибо за подсказку, я получил его, переопределив метод , который имеет доступ к объекту клиента. Затем мне удалось получить доступ к объекту Address и вернуть SimpleStringProperty и обновить каждый столбец соответствующим образом.

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());     
     } 
}); 
Смежные вопросы