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 :: getXXXProperty 대신 Data.getProperty (n) 메서드를 전달하는 방법은 무엇입니까? 도움
찾고 있습니다. 감사. – Andrew