JavaFX - 临时禁用TableView刷新

时间:2016-05-11 16:35:11

标签: java javafx javafx-8

我正在开发一种食物计算器,它可以在修改TableColumn细胞后重新计算食物元素(如脂肪,蛋白质,碳水化合物)。

修改应该只是可视化的,所以我决定更改值,然后刷新TableView,然后将旧值重新放回而不再刷新,以便用户看到新值,但后端数据保持不变。

我就这样做了:

enter image description here

以下是用于复制/粘贴目的的文本表单:

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。有没有办法阻止它或以另一种方式更新它们?

0 个答案:

没有答案