单击“删除”按钮时,我正在尝试删除ListView中的项目,但是它不起作用,无法弄清。 这是我的代码示例,用于根据实例“ Student”删除条目:
public void deleteButton(ActionEvent actionEvent) {
if (notesListView.getSelectionModel().isEmpty()) {
InfoModal.show("Bitte wählen Sie die zu löschende Notiz aus.");
return;
}
boolean delete = ConfirmationModal.show("Soll die Notiz gelöscht werden?");
if (delete) {
Dao<Notepad, Integer> notepadDao = db.getNotepadDao();
try {
if (this.objectType instanceof Student) {
Dao<StudentNotepad, Integer> studentNotepadDao = db.getStudentNotepadDao();
for (StudentNotepad n : studentNotepadDao) {
if (notesListView.getSelectionModel().getSelectedItem().equals(n.getNotepad())) {
SceneManager.getInstance().getLoaderForScene(SceneType.NOTESTAB_WINDOW).
<NotesTabController>getController().notesListView.getItems().remove(n.getNotepad());
studentNotepadDao.delete(n);
notepadDao.delete(n.getNotepad());
}
}
}
}
}
}
这是我的ListView / ListCell的启动方式:
public void setObject(Object object) {
//Getting Object Type (Group, Groupage or Student)
this.objectType = object;
try {
if (this.objectType instanceof Student) {
ObservableList<Notepad> list = FXCollections.observableArrayList();
for (StudentNotepad s : db.getStudentNotepadDao()) {
if ((db.getLoggedInUser() == s.getNotepad().getUser()) && ((((Student) this.objectType).getId() == s.getStudent().getId()))) {
list.add(s.getNotepad());
}
}
notesListView.setItems(list);
notesListView.getItems().clear(); //not needed if list is definitly 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());
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);
}
};
}
});
}
} catch(SQLException e) {
e.printStackTrace();
}
}
此外,在同一ObjectType中更改Object后,我的列表没有刷新。示例:从Student1更改为Student2。在像Student1到Group1这样的ObjectTypes之间进行切换是可行的。我认为问题出在我的ListCell的过滤器功能上。 有人有主意吗?我在这个问题上挣扎了好几个小时,无法解决!