Все ListCell
созданы одной и той же фабрикой.Замена фабрики несколько раз приводит к тому, что последняя фабрика создает ячейки, а не ячейки, создаваемые фабрикой, установленной во время итерации, соответствующей элементу.
n.getNotepad().getNotepadName().equals(item)
дает только true для одного элемента по этой причине..
Используйте здесь ListView<Notepad>
(я предполагаю, StudentNotepad.getNotepad
возвращает объект типа Nodepad
).
В следующем коде также предполагается, что db.getStudentNotepadDao().queryForAll()
возвращает Collection
,Если он возвращает массив, используйте Stream.of
с массивом в качестве параметра вместо метода stream()
.
notesListView.getItems().clear(); // this is not necessary, if the list is guaranteed to be empty
db.getStudentNotepadDao().queryForAll().stream()
.map(StudentNotepad::getNotepad)
.filter(n -> n.getUser().equals(db.getLoggedInUser()))
.forEach(notesListView.getItems()::add);
notesListView.setCellFactory(new Callback<ListView<Notepad>, ListCell<Notepad>>() {
public ListCell<Notepad> call(ListView<Notepad> param) {
return new ListCell<Notepad>() {
@Override
protected void updateItem(Notepad item, boolean empty) {
super.updateItem(item, empty);
String style = "";
if (!empty && item != null) {
setText(item.getNotepadName());
// this switch could be rewritten using a Map<String, String>
switch (item.getNotepadPriority()) {
case "Hoch":
style = "-fx-background-color: red";
break;
case "Mittel":
style = "-fx-background-color: yellow";
break;
case "Niedrig":
style = "-fx-background-color: green";
break;
case "Neutral":
style = "-fx-background-color: grey";
break;
}
} else {
setText("");
}
setStyle(style);
}
};
}
});