2016-06-04 2 views
0

Я хочу создать простое приложение, которое генерирует диаграммы на основе данных в файле. Затем я хочу динамически добавлять столбцы и привязывать их к ним. КлассДинамическое добавление привязки к TableView

Модель:

public class ChartData { 
private ObservableList<String> series; 
private ObservableList<Data> data; 

public ChartData(){ 
    series = FXCollections.observableArrayList(); 
    data = FXCollections.observableArrayList(); 
} 

//getters, setters ommited 
} 

public class Data { 

private final StringProperty name = new SimpleStringProperty(this, "name"); 
private final ObservableList<Property<Number>> values = FXCollections.observableArrayList(); 


public ObservableList<Property<Number>> getValues() { 
    return values; 
} 

public String getName() { 
    return name.get(); 
} 

public final StringProperty nameProperty() { 
    return name; 
} 

public void setName(String name) { 
    this.name.set(name); 
} 

public void addValue(Double val) { 
    values.add(new SimpleDoubleProperty(val)); 
} 

public Object getFirstValue() { 
    return values.get(0).getValue(); 
} 

public Object getValue(int count) { 
    return values.get(count).getValue(); 
} 

public Property<Number> getFirstProperty(){ 
    return this.values.get(0); 
} 
public Property<Number> getSecondProperty(){ 
    return this.values.get(1); 
} 
public Property<Number> getThirdProperty(){ 
    return this.values.get(2); 
} 

public Property<Number> getProperty(int count){ 
    return this.values.get(count); 
} 

} 

Способ связывания:

private <S, T> TableColumn<S,T> createCol(String title, 
              Function<S,ObservableValue<T>> propertySelector, 
              StringConverter<T> converter, 
              boolean editable) { 

    TableColumn<S,T> col = new TableColumn<>(title); 
    col.setEditable(editable); 
    col.setCellFactory(TextFieldTableCell.forTableColumn(converter)); 
    col.setCellValueFactory(cellData -> propertySelector.apply(cellData.getValue())); 
    return col ; 
} 

Запрограммированные связывания:

private void initializeTableViewCellFactoryListeners(ChartData chartData) { 
    chartDataTableView.getColumns().clear(); 
    chartDataTableView.getItems().clear(); 

    // test end. 
    DefaultStringConverter def = new DefaultStringConverter(); 
    NumberStringConverter num = new NumberStringConverter(); 

    // build columns dynamically!? 
    chartDataTableView.getColumns().add(createCol("Name", Data::nameProperty, def, false)); 

    chartDataTableView.getColumns().add(createCol("Val1", Data::getFirstProperty, num, true)); 
    //chartDataTableView.getColumns().add(createCol("Val2", Data::getSecondProperty, num, true)); 
    //chartDataTableView.getColumns().add(createCol("Val3", Data::getThirdProperty, num, true)); 
} 

Как передать метод Data.getProperty (n) вместо Data :: getXXXProperty?

Спасибо за помощь

ответ

1

Не уверен, что я полностью понимаю, что вы спрашиваете: вы ищете

chartDataTableView.getColumns().add(createCol("Val1", 
    data -> data.getProperty(n), 
    num, true)); 
+0

Да, я искал для этого. Благодаря. – Andrew

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