@FXML
ListView queueList;
ObservableList<QueueSong> SongQueueObservableList;
queueList.setCellFactory(new Callback<ListView<QueueSong>,ListCell<QueueSong>>() {
@Override
public ListCell<QueueSong> call(ListView<QueueSong> myObjectListView) {
ListCell<QueueSong> cell = new ListCell<QueueSong>(){
@Override
protected void updateItem(QueueSong myObject, boolean b) {
super.updateItem(myObject, b);
if(myObject != null) {
setText(myObject.getSong());
}
}
};
return cell;
}
});
queueList.setItems(SongQueueObservableList);
SongQueueObservableList.add(new QueueSong("song 1", "artist 1"));
SongQueueObservableList.add(new QueueSong("song 2", "artist 2"));
SongQueueObservableList.add(new QueueSong("song 3", "artist 3"));
SongQueueObservableList.add(new QueueSong("song 4", "artist 4"));
我尝试过以下删除
的实现Platform.runLater( () -> {
// queueList.getItems().remove(0);
SongQueueObservableList.remove(0);
});
第一次复制后的行不可选。并且只有从列表中删除所有值后,ListView
才会更新为空列表。
如果有人对如何解决这个问题有任何提示,我会很感激。
当我使用调试器时,ObservableList
和ListView
都具有预期值。我想真正的问题是,为什么只有在移除所有对象时,ListView
才会自行清除?
答案 0 :(得分:3)
问题是您使用的单元类。它只设置文本,但从不清除它。由于单元格可能变空,您需要解决此问题:
new ListCell<QueueSong>(){
@Override
protected void updateItem(QueueSong myObject, boolean empty) {
super.updateItem(myObject, empty);
// set text to song or clear (= set to null)
setText((empty || myObject == null) ? null : myObject.getSong());
}
}