Javafx ListView удаляет элемент ListCell - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь удалить элементы в 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();
    }
}

Кроме того, мойСписок не обновляется после изменения объекта в том же типе объекта.Пример: переход от ученика1 к ученику2.Переключение между объектными типами, такими как Student1 и Group1, работает.Я думаю, что проблема заключается в функции фильтра моего ListCell.У кого-нибудь есть идея?Я часами борюсь с этой проблемой и не могу ее решить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...