gpt4 book ai didi

java - 在 TableView 中使用 PropertyValueFactory 中的值 - JavaFx

转载 作者:行者123 更新时间:2023-12-01 17:50:55 27 4
gpt4 key购买 nike

在我的 JavaFx 项目中,我有一个带有几个 View 的场景。对于窗口的页脚,我有一个从 TableView 扩展的类:

public class FooterView extends TableView<Area> implements ViewTemplate {...}

这将显示一个表格,其中包含 .csv 文件中的一些数据。

当涉及到将特定的presentationmodel属性的值分配给单元格时,我这样做:

TableColumn<Area,Double> powerColumn = new TableColumn<>("Power Overview");
powerColumn.setCellValueFactory(new PropertyValueFactory<>("powerPerArea"));

this.setItems(filePM.getAreas()); //filePm is my filehandler
this.getColumns().addAll(powerColumn, other_columns);

getAreas() 看起来像这样:

public List<Area> readCantonsFromFile() {
try (Stream<String> stream = getStreamOfLines(AREA_FILE_NAME)) {
return stream.skip(1)
.map(l -> new Area(l.split(DELIMITER, 12)))
.collect(Collectors.toList());
}
}

Area的构造函数中,我设置了属性。其中一个属性是提到的 powerPerArea

private final DoubleProperty powerPerArea = new SimpleDoubleProperty();
...
public void setPowerPerCanton(double powerPerCanton) {
this.powerPerCanton.set(powerPerCanton);
}

我的问题:有没有办法在显示值之前更改 FooterView 中的值?我尝试过这样的事情:

powerColumn.setCellValueFactory(Math.round(new PropertyValueFactory<>("powerPerArea")));

但我似乎混淆了 DoubleProperty、Double 和 ObservableDouble。我可以修改这里的值吗?

问题:我无法舍入 setter 中的值,因为我通过此函数在循环中添加了 double 值:

public void addPowerPerArea(double power){
double sum = getPowerPerCanton() + power;
setPowerPerCanton(sum);
}

四舍五入这里的值会给我一个错误的结果。 (四舍五入不够精确)。最后我需要在所有金额相加后执行此操作

最佳答案

您应该使用 cellValueFactory 来确定单元格中显示哪些数据:在这种情况下,您的 PropertyValueFactory 返回的数据是从 powerPerAreaProperty().get() 返回的实际 double 值,这正是您想要的。

如果您想控制数据的显示方式,您应该使用cellFactory。因此,要以特定格式显示数据,包括限制小数位数,您可以这样做:

powerColumn.setCellFactory(tc -> new TableCell<Area, Double>() {
@Override
protected void updateItem(Double power, boolean empty) {
super.updateItem(power, empty);
if (empty) {
setText(null);
} else {
setText(String.format("%.0f", power.doubleValue()));
}
}
});

这里的要点是,您不应该根据您想要的显示方式来修改数据;同时拥有 cellValueFactorycellFactory 的目的是将数据的显示与实际数据本身分开。

关于java - 在 TableView 中使用 PropertyValueFactory 中的值 - JavaFx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50289679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com