Задача тривиальная: в зависимости от значения в наборе данных, надо красить строку зелёненким цветом.
Примеров решений задачи в инете, вагон и маленькая тележка.
Обычно рекомендуют что то типа такого:
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");
}
}
}
}
};
});
Примеров решений задачи в инете, вагон и маленькая тележка.
Обычно рекомендуют что то типа такого:
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
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
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
while (it.hasNext()) {
Long zakazIndex = it.next().getProductIndex();
Long pIndex = item.getIndex();
if ( Objects.equals(zakazIndex, pIndex) ) {
setStyle("-fx-background-color:lightgreen");
}
}
}
}
};
});
Спасибо огромное, прочитал о проблеме не за долго до ее проявления! СПАСИБО!!!
ОтветитьУдалить