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?
Спасибо за помощь
Да, я искал для этого. Благодаря. – Andrew