JavaFX TableView Nested Property Binding -
i have list of objects containing lists of complex data type , need bind these properties tableview. entities looking this:
public class customer {    stringproperty property1;    stringproperty property2;    ....    list<contract> contracts; }   public class contract {     stringproperty property1;     stringproperty property2;     .... }   my observablearraylist contains list of customer contains list of contract. getting customer properties easy:
samplecolumn1.setcellvaluefactory(celldata -> celldata.getvalue().sampleproperty1()); samplecolumn2.setcellvaluefactory(celldata -> celldata.getvalue().sampleproperty2()); ...   but can't properties of contract list.. following workaround:
propertyvaluefactory<customer, list<contract>> contractfactory = new propertyvaluefactory<>("contracts"); contractidcolumn.setcellvaluefactory(contractfactory); contractidcolumn.setcellfactory(celldata -> new tablecell<customer>, list<contract>>(){ @override public void updateitem(list<contract> contracts, boolean empty){     super.updateitem(contracts, empty);     if(empty)     settext("");                 else     settext(contracts.stream().map(contract::getcontractid)    .collect(collectors.joining("\n"))); } });   but code dirty, know approach cellvaluefactory , lambda expressions? suggestions?
a cell value factory callback taking celldatafeatures , returning appropriate observable value, should able this:  
contractidcolumn.setcellvaluefactory(celldatafeatures -> new simplestringproperty(celldatafeatures.getvalue().contracts.stream()     .map(contract::getcontractid)     .collect(collectors.joining("\n"))));     note if use observablelist instead of list use bindings.createstringbinding value update if list updates customer element not change. 
Comments
Post a Comment