listview - 我在 ListView 中设置项目后,ListView 中的项目消失 - Java
问题描述
第一次使用堆栈溢出。我对 JavaFx 很陌生。我的项目中有一个 ListView 来显示所有Post项目。有三种 Post ,分别是Event、Sale和Job。当我尝试使用ChoiceBox过滤帖子并显示不同类型的帖子时。我发现它在前几次运行中运行良好。在我更改选择框服务时间后,项目消失,但我仍然可以在 ListView 上选择项目。打印后发现 FilteredList 是正确的。看起来 ListView 上的项目加载得不是很好。
这是初始化设置的代码
postInfoObservableList = FXCollections.observableArrayList(UniLinkDatabase.getPosts().values());
//set choice box items
typeChoiceBox.getItems().addAll("All", "Event", "Sale", "Job");
typeChoiceBox.setValue("All");
statusChoiceBox.getItems().addAll("All", "Open", "Closed");
statusChoiceBox.setValue("All");
creatorChoiceBox.getItems().addAll("All", "My Post");
creatorChoiceBox.setValue("All");
//set ListView items
postInfoListView.setItems(postInfoObservableList);
postInfoListView.setCellFactory(listView -> new PostListViewCellController(currentUserIDLabel.getText()));
//turn off selection mode
postInfoListView.setFocusTraversable(false);
FilteredList<Post> filteredData = new FilteredList<>(postInfoObservableList, p -> true);
typeChoiceBox.getSelectionModel().selectedItemProperty().addListener((observableValue, oldValue, newValue) -> {
filteredData.setPredicate(post -> {
if (newValue == "Event" && post instanceof Event) {
return true;
} else if (newValue == "Sale" && post instanceof Sale) {
return true;
} else if (newValue == "Job" && post instanceof Job) {
return true;
} else if (newValue == "All") {
return true;
}
return false;
});
postInfoListView.setItems(filteredData);
});
覆盖 updateItem 的代码
protected void updateItem(Post post, boolean empty) {
super.updateItem(post, empty);
if(empty || post ==null){
setText(null);
setGraphic(null);
}
else {
if(mlLoader == null){
mlLoader = new FXMLLoader(getClass().getResource("/view/post_listView_cell.fxml"));
mlLoader.setController(this);
try {
mlLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
//set common details of post
titleLabel.setText(post.getTitle());
postIDLabel.setText(post.getId());
creatorIDLabel.setText(post.getCreatorId());
statusLabel.setText(post.getStatus());
descriptionLabel.setText(post.getDescription());
postImageView.setImage(post.getPhoto());
//set other details according the types of post
if(post instanceof Event){
hbox.setStyle("-fx-background-color: LIGHTCYAN ");
label00.setText("Venue:");
label01.setText("Date:");
label02.setText("Capacity:");
label03.setText("Attendee count:");
label10.setText(((Event) post).getVenue());
label11.setText(((Event) post).getDate());
label12.setText(Integer.toString(((Event) post).getCapacity()));
label13.setText(Integer.toString(((Event) post).getAttendeeCount()));
}else if(post instanceof Sale){
hbox.setStyle("-fx-background-color: LIGHTPINK ");
label00.setText("Highest offer:");
label01.setText("Minimum raise:");
label10.setText("$"+ ((Sale) post).getHighestOffer());
label11.setText("$"+ ((Sale) post).getMinRaise());
//Check information about current user to decide show Asking price or not
if(currentUserID.equalsIgnoreCase(post.getCreatorId())){
label02.setText("Asking price:");
label12.setText("$"+ ((Sale) post).getAskingPrice());
}
}else if(post instanceof Job){
hbox.setStyle("-fx-background-color: LIGHTYELLOW ");
label00.setText("Proposed price:");
label01.setText("Lowest offer:");
label10.setText("$" + ((Job) post).getProposedPrice());
label11.setText("$"+ ((Job) post).getLowestOffer());
}
setText(null);
setGraphic(hbox);
//TODO recognize different post
}
}
}
第一次加载 图像效果很好 但是在更改选择框几次后它错过了一些帖子,但仍然可以在 ListView 上选择项目在此处输入图像描述
没有人知道这是什么问题吗?
解决方案
推荐阅读
- python - 为什么在调用worksheet.cell时分配给'_'?
- python - NameError:名称“compile_and_fit”未定义
- spring - Spring Boot 应用程序收到警告,如何解决这个问题,这个警告会影响生产?
- python - 文件修改时间线(按天分组)
- javascript - 在一个 React Page 上使用多个组件
- jupyter-notebook - 如何在 Python/Jupyter Notebook 中漂亮地打印或可视化类“CoreNLP_pb2.ParseTree”的对象?
- excel - 在 Excel 中根据多个条件返回一个值
- c++ - 如何正确跟踪 VBO 和 VAO 以进行清理?
- python - 无法获取 div 的文本
- python - Pygame如何检测图像列表中的点击