【问题标题】:JavaFX ListView duplicate removal errorJavaFX ListView 重复删除错误
【发布时间】:2016-07-19 08:12:46
【问题描述】:

link to imgur

@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 才会更新为空列表。

如果有人对如何解决这个问题有任何建议,我将不胜感激。

当我使用调试器时,ObservableListListView 都具有预期值。我想真正的问题是,为什么只有当所有对象都被删除时,ListView 才会自行清除?

【问题讨论】:

标签: listview javafx observable observablelist


【解决方案1】:

问题在于您使用的单元格类。它只设置文本,但从不清除它。由于单元格可能会变为空,因此您需要修复此行为:

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());
    }
}

【讨论】:

  • 我自己应该发现的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 2015-05-25
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多