我正在开发一种食物计算器,它可以在修改TableColumn细胞后重新计算食物元素(如脂肪,蛋白质,碳水化合物)。
修改应该只是可视化的,所以我决定更改值,然后刷新TableView,然后将旧值重新放回而不再刷新,以便用户看到新值,但后端数据保持不变。
我就这样做了:
以下是用于复制/粘贴目的的文本表单:
for(TableColumn<Food, Float> n : columnArray) {
n.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter()));
n.setOnEditCommit(e -> {
float oldValue = e.getOldValue();
float newValue = e.getNewValue();
float proportionalChange = newValue / oldValue;
float quantityOldValue = e.getRowValue().getQuantity();
float proteinOldValue = e.getRowValue().getProtein();
float carbohydratesOldValue = e.getRowValue().getCarbohydrates();
float fatOldValue = e.getRowValue().getFat();
e.getRowValue().setQuantity(proportionalChange * quantityOldValue);
e.getRowValue().setProtein(proportionalChange * proteinOldValue);
e.getRowValue().setCarbohydrates(proportionalChange * carbohydratesOldValue);
e.getRowValue().setFat(proportionalChange * fatOldValue);
foodTable.refresh();
e.getRowValue().setQuantity(quantityOldValue);
e.getRowValue().setProtein(proteinOldValue);
e.getRowValue().setCarbohydrates(carbohydratesOldValue);
e.getRowValue().setFat(fatOldValue);
});
}
问题是 - 调用setQuantity
,此代码末尾的其他方法会自动刷新TableView。有没有办法阻止它或以另一种方式更新它们?