Javafx ListView删除ListCell项目

时间:2018-12-02 16:51:20

标签: java listview javafx

单击“删除”按钮时,我正在尝试删除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的过滤器功能上。 有人有主意吗?我在这个问题上挣扎了好几个小时,无法解决!

0 个答案:

没有答案