В моем проекте JavaFx у меня есть сцена с несколькими представлениями. Для нижнего колонтитула окна у меня есть класс, выходящий из 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. Могу ли я изменить значение здесь?
Проблема: я не могу округлить значение в установщике, потому что я добавляю двойное значение в цикле через эту функцию:
public void addPowerPerArea(double power){
double sum = getPowerPerCanton() + power;
setPowerPerCanton(sum);
}
И округление значения здесь даст мне неверный результат. (округление недостаточно точное). Мне нужно сделать это в конце, когда все суммы добавляются