【发布时间】:2016-04-22 15:45:47
【问题描述】:
我正在尝试根据自定义objects 列表由自定义Cell 制成自定义ListView。
自定义对象是名为Message的类名,其中包含消息content、recipient、timestamp和的几个字段>状态(读取、发送等)。
看了这个问题后:Customize ListView in JavaFX with FXML我成功了:
- 创建了一个带有自定义单元格的 ListView,其中单元格设计在 FXML 文件中定义;
- 关联了一个控制器,这样每个单元格的数据就可以用集合的当前项来填充;
但是,我未能链接两者:我似乎无法找到将 ListView 的当前项发送到 Cell Controller 的方法。
这是我的单元工厂代码和项目的 ListView 填充:
final ObservableList observableList = FXCollections.observableArrayList();
observableList.setAll(myMessages); //assume myMessage is a ArrayList<Message>
conversation.setItems(observableList); //the listview
conversation.setCellFactory(new Callback<ListView<Message>, ListCell<Message>>() {
@Override
public ConversationCell<Message> call(ListView<Message> listView) {
return new ConversationCell();
}
});
现在,ConversationCell 类:
public final class ConversationCell<Message> extends ListCell<Message> {
@Override
protected void updateItem(Message item, boolean empty) {
super.updateItem(item, empty);
ConversationCellController ccc = new ConversationCellController(null);
setGraphic(ccc.getView());
}
}
我无法显示 ConversationCellController 但我只能说,这是(在其构造函数中)我加载设计单元格的 FXML 文件的位置,然后我可以使用给定的消息项填充值。
getView() 方法返回包含现在填充和设计的单元格的根窗格。
正如我之前所说,设计工作,但我似乎无法将 ListView 项目与 CellFactory 链接,因为在方法中
protected void updateItem(Message item, boolean empty)
empty 设置为 true 并且 item 确实是 null。
我能做些什么来完成这项工作?
【问题讨论】:
标签: java listview javafx custom-cell