Я загружаю таблицу из базы данных в табличное представление. Я использую пользовательский CellFactory для определенных столбцов в зависимости от их типа/значения. В основном мне нужно выделить ячейки в столбцах типа Float, которые превышают пороговое значение. Я вижу, что это работает, когда табличное представление заполняется в первый раз, но когда я прокручиваю таблицу или сортирую столбцы, рендеринг искажается, то есть не работает. Я заметил, что updateItem не вызывается при прокрутке или сортировке. Как я могу сделать рендеринг TableView «правильным» независимо от прокрутки и сортировки?
Это часть кода, которую я использую:
else
{
TableColumn col=new TableColumn(rs.getMetaData().getColumnName(i+1));
col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,Float>,ObservableValue<Float>>()
{
@Override
public ObservableValue<Float> call(CellDataFeatures<ObservableList, Float> param)
{
return new SimpleObjectProperty(param.getValue().get(j));
}
});
col.setCellFactory(new Callback<TableColumn<ObservableList, ObservableValue<Float>>, TableCell<ObservableList, Float>>()
{
@Override
public TableCell<ObservableList, Float> call(TableColumn<ObservableList,ObservableValue<Float>> param)
{
TableCell<ObservableList,Float> cell=new TableCell<ObservableList,Float>()
{
@Override
public void updateItem(Float item, boolean empty)
{
super.updateItem(item, empty);
if(item!=null)
{
if(item>0.5)
{
setText(item.toString());
setTextFill(Color.BLACK);
setFont(Font.font(null, FontWeight.BOLD, 12));
setStyle("-fx-background-color:RED");
}
else
{
setText(item.toString());
setTextFill(Color.BLACK);
}
}
}
};
return cell;
}
});
table.getColumns().addAll(col);
col.prefWidthProperty().bind(table.prefWidthProperty().divide(10));
}