JavaFX CellFactory开关函数返回对象错误且为NULL,即使它不应为NULL

时间:2019-01-20 15:36:00

标签: java listview javafx listcellrenderer

我当前正在开发一个名为NotesHistoryController的Log类,其中包含NotepadHistory类型的项目。 NotepadHistory个对象包含已更改的Notepad对象,一个时间戳记和更改了便笺对象的登录用户。

Notepad必须具有优先级,例如“好”或“不良”等,并且优先级可以根据ListView中显示的颜色(即{{1}中定义的颜色)来识别}。

我创建cellFactory对象的方式是这样的:用户更改当前的便笺对象,db正在更新旧对象,然后我定义/创建一个NotepadHistory对象及其属性+对更改后的NotepadHistory对象的外部引用:

Notepad

现在有一个按钮,单击该按钮后应显示带有Dao<Notepad, Integer> notepadDao = db.getNotepadDao(); Dao<NotepadHistory, Integer> notepadHistoryDao = db.getNotepadHistoryDao(); NotepadHistory notepadHistory = new NotepadHistory(); //Saving the Notepad which is to be edited to delete it from the listView in the main window Notepad ersatz = this.notepad; Timestamp timestamp = new Timestamp(System.currentTimeMillis()); //Saving the notepad after edits this.notepad.setNotepadName(noteName); this.notepad.setClassification(priority); this.notepad.setNotepadContent(textContent); try { notepadHistory.setNotepad(this.notepad); notepadHistory.setTimestamp(timestamp); notepadHistory.setUser(db.getLoggedInUser()); notepadHistoryDao.create(notepadHistory); notepadDao.update(this.notepad); 个对象的ListView。所有这些都发生在NotepadHistory类中。这是我的问题:单击应用程序中的“历史记录”按钮后,它在我的NotesHistoryController中给了我一个NullPointerException。调试后,我发现当前cellFactory对象的引用记事本对象除记事本ID之外没有任何列表。经过数小时的调试等,我仍然不知道问题出在哪里。这是我的NotepadHistory

cellFactory

奇怪的是,它没有给我notesHistoryListView.getItems().addAll(db.getNotepadHistoryDao().queryForAll()); notesHistoryListView.setCellFactory(new Callback<ListView<NotepadHistory>, ListCell<NotepadHistory>>() { public ListCell<NotepadHistory> call(ListView<NotepadHistory> param) { return new ListCell<NotepadHistory>() { @Override protected void updateItem(NotepadHistory item, boolean empty) { super.updateItem(item, empty); String style = ""; if (!empty && item != null) { setText(item.getNotepad().getNotepadName()); switch (item.getNotepad().getClassification()) { case GOOD: style = "-fx-background-color: green"; break; case MEDIUM: style = "-fx-background-color: yellow"; break; case BAD: style = "-fx-background-color: red"; break; case NEUTRAL: style = "-fx-background-color: grey"; break; } } else { setText(""); } setStyle(style); } }; } }); 行的例外。仅用于第setText(item.getNotepad().getNotepadName());行。

0 个答案:

没有答案