我尝试使用动态生成的列
更改TableView中的值TableGenerator
for(Person p : personList){
TableColumn<List<String>, String> table1 = new TableColumn<>();
table1.setText(p.getName());
table1.setCellValueFactory(data -> {
List<String> rowValues = data.getValue();
int index = personList.indexOf(p);
return index >= 0 && index < rowValues.size()
? new SimpleStringProperty(rowValues.get(index))
: null;
});
table1.setCellFactory(TextFieldTableCell.forTableColumn());
table1.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<List<String>,String>>() {
@Override
public void handle(CellEditEvent<List<String>, String> event) {
((List<String>) event.getTableView().getItems().get(
event.getTablePosition().getRow())
).add(event.getNewValue());
}
});
tableColumnList.add(table1);
}
tableview.getColumns().clear();
tableview.getColumns().addAll(tableColumnList);
tableview.setEditable(true);
DataGenerator
for(Person p: personList){
int index = personList.indexOf(p);
if(index > 0 ){
ObservableList<String> datal = FXCollections.observableArrayList();
datal.add(p.getName());
for(int j = 1; j<=index; j++){
datal.add(null);
}
for(int i = index; i <= personList.size() ;i++){
datal.add("0");
}
tableview.getItems().add(datal);
}
从细胞中获取新值
for(Person person: personList){
int row = personList.indexOf(person);
if(row < personList.size()-2){
for(Person c : personList){
int column = personList.indexOf(c);
if(column>0){
Object item = tableview.getItems().get(row);
Object col = tableview.getColumns().get(column);
String value = (String) ((TableColumn) col).getCellObservableValue(item).getValue();
if(value!= null){
Family family = new Family(c , person , new BigDecimal(value));
System.out.println(family.getCostofLeaving());
}
}
}
}
}
我总是0,但我改变了这个值,我认为当我点击按钮
时它不会令人耳目一新