2015-12-28 3 views
0

У меня проблема, когда я не могу загрузить 3 свойства из объекта, чтобы отображаться в виде таблицы. У меня есть объект платежа, состоящий из объекта-бенефициара (состоящий из 3 строк - имя, номер счета и код), строка суммы и ссылочная строка. Я могу просмотреть элементы, если они были частью одного и того же объекта, однако, когда я их разделяю, это не вызывает проблем, и ячейка пуста.JavaFX - загрузка строк в TableView из объекта

Ниже приведены мои классы и скриншот TableView.

public class Payment { 

private Beneficiary beneficiary; 
private String amount; 
private String reference; 

public void setBeneficiary(Beneficiary bene) { 
    beneficiary = bene; 
} 

public Beneficiary getBeneficiary() { 
    return beneficiary; 
} 

public void setAmount(String amt) { 
    amount = amt; 
} 

public String getAmount() { 
    return amount; 
} 

public void setReference(String ref) { 
    reference = ref; 
} 

public String getReference() { 
    return reference; 
} 



@XStreamAlias("beneficiary") 
public class Beneficiary { 

@XStreamAlias("beneficiaryName") 
private String beneficiaryName; 
@XStreamAlias("beneficiaryAccountNumber") 
private String beneficiaryAccountNumber; 
@XStreamAlias("beneficiarySortCode") 
private String beneficiarySortCode; 

public String getBeneficiaryName() { 
    return beneficiaryName; 
} 

public void setBeneficiaryName(String name) { 
    beneficiaryName = name; 
} 

public String getBeneficiaryAccountNumber() { 
    return beneficiaryAccountNumber; 
} 

public void setBeneficiaryAccountNumber(String accountNumber) { 
    beneficiaryAccountNumber = accountNumber; 
} 

public String getBeneficiarySortCode() { 
    return beneficiarySortCode; 
} 

public void setBeneficiarySortCode(String sortCode) { 
    beneficiarySortCode = sortCode; 
} 



     <TableView fx:id="paymentTable" layoutX="17.0" layoutY="222.0" prefHeight="200.0" prefWidth="812.0"> 
      <columns> 
      <TableColumn fx:id="beneficiaryNameColumn" editable="false" prefWidth="169.0" text="Beneficiary Name"> 
       <cellValueFactory><PropertyValueFactory property="beneficiaryName" /></cellValueFactory> 
      </TableColumn> 
      <TableColumn fx:id="beneficiaryAccountNumberColumn" prefWidth="177.0" text="Beneficiary Account Number"> 
       <cellValueFactory><PropertyValueFactory property="beneficiaryAccountNumber" /></cellValueFactory> 
      </TableColumn> 
      <TableColumn fx:id="beneficiarySortCodeColumn" prefWidth="130.0" text="Beneficiary Sort Code"> 
       <cellValueFactory><PropertyValueFactory property="beneficiarySortCode" /></cellValueFactory> 
      </TableColumn> 
      <TableColumn fx:id="amount" prefWidth="147.0" text="Amount"> 
       <cellValueFactory><PropertyValueFactory property="amount" /></cellValueFactory> 
      </TableColumn> 
      <TableColumn prefWidth="184.0" text="Payment Reference"> 
       <cellValueFactory><PropertyValueFactory property="reference" /></cellValueFactory> 
      </TableColumn> 
      </columns> 
     </TableView> 

Каждый раз, когда я пытаюсь загрузить платеж в tableView, отображаются только количество и ссылка. Я попытался использовать различные комбинации для значения PropertyValueFactory для ссылки на мой объект-бенефициар, но не повезло.

enter image description here

ответ

0

PropertyValueFactory не может получить доступ к "свойство свойства". Вместо этого вы должны ввести Callback, который требуется непосредственно setCellValueFactory. Вы не можете делать это исключительно в FXML, но вы можете легко реализовать эту реализацию, используя выражение лямбда в классе контроллера.

// controller class referenced by root element of FXML file: 
public class MyController { 

    public void initialize() { 

     beneficiaryNameColumn.setCellValueFactory(cellData -> { 
      Payment payment = cellData.getValue(); 
      Beneficiary beneficiary = payment.getBeneficiary(); 
      return new ReadOnlyStringWrapper(beneficiary.getBeneficiaryName()); 
     }); 

     // etc 
    } 

} 

Или, более сжато:

beneficiary.setCellValueFactory(cellData -> 
    new ReadOnlyStringWrapper(cellData.getValue().getBeneficiary().getBeneficiaryName())); 
+0

Большое вам спасибо James_D. Он работает отлично. – Adamjee

Смежные вопросы