Примеров решений задачи в инете, вагон и маленькая тележка.
Обычно рекомендуют что то типа такого:
tableView.setRowFactory((row) -> {
return new TableRow(){
@Override
public void updateItem(MainTable item, boolean empty){
super.updateItem(item, empty);
if (item == null || empty) {
setStyle(«»);
} else {
Iterator it = tableZakaz.getItems().iterator();
while (it.hasNext()) {
Long zakazIndex = it.next().getProductIndex();
Long pIndex = item.getIndex();
if ( Objects.equals(zakazIndex, pIndex) ) {
setStyle(«-fx-background-color:lightgreen»);
}
}
}
}
};
});
И оно даже работает. Но, пока в таблице не включается скроллинг. Как только в таблице начинаешь листать страницы, с удивлением обнаруживаешь, что красятся произвольные строки, в произвольном порядке.
Решение, простое.
До вызова
super.updateItem(item, empty);
Сбросьте стили.
tableView.setRowFactory((TableView row) -> {
return new TableRow(){
@Override
public void updateItem(MainTable item, boolean empty){
// Сначала обязательно сбрасываем стиль.
setStyle(«»);
// и только после этого вызываем метод super.updateItem
super.updateItem(item, empty);
if (item == null || empty) {
setStyle(«»);
} else {
Iterator it = tableZakaz.getItems().iterator();
while (it.hasNext()) {
Long zakazIndex = it.next().getProductIndex();
Long pIndex = item.getIndex();
if ( Objects.equals(zakazIndex, pIndex) ) {
setStyle(«-fx-background-color:lightgreen»);
}
}
}
}
};
});