JavaFX-无法刷新/更新ListView

JavaFX-无法刷新/更新ListView,java,listview,javafx,removing-whitespace,Java,Listview,Javafx,Removing Whitespace,看来我被一个最简单的ListView实现难倒了。几天来,我发现不可能正确地重新分配JavaFXListView。我正在努力使EntityView完全动态化,能够在需要时通过ContextMenu删除元素。因此,我有一个由ArrayList填充的ListView,我们将其称为“renderable”。当您在关联菜单中选择“删除”时,它将从可渲染列表中删除实体,该列表恰好也是我右键单击的列表单元格的“值”。之后,我希望刷新ListView并立即删除不存在的单元格。因此,通过使用新的可渲染列表创建一个

看来我被一个最简单的ListView实现难倒了。几天来,我发现不可能正确地重新分配JavaFXListView。我正在努力使EntityView完全动态化,能够在需要时通过ContextMenu删除元素。因此,我有一个由ArrayList填充的ListView,我们将其称为“renderable”。当您在关联菜单中选择“删除”时,它将从可渲染列表中删除实体,该列表恰好也是我右键单击的列表单元格的“值”。之后,我希望刷新ListView并立即删除不存在的单元格。因此,通过使用新的可渲染列表创建一个新的ObservableList(它删除了正确的实体,并且工作正常),我在ListView中设置了项,这就完成了。在这种情况下,我可以将列表设置为null,这将删除所有元素。但是我不能用新数组重置列表,它会删除现在丢失的实体。请给我指一下正确的方向

当我使用上面提到的方法时,它会将其从列表中删除,但不是直观地删除。列表底部有一个不可用的单元格,其名称为

public void createContextMenu(final Entity curr, MouseEvent me){
    MenuItem[] items = {new MenuItem("EDIT TYPE"), new MenuItem("REMOVE")};

    ContextMenu menu = new ContextMenu(items);

    menu.show(list, me.getScreenX(), me.getScreenY());

    items[1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent arg0) {
            CanvasTab tab = (CanvasTab) core.canvasTabbedPane.getSelectionModel().getSelectedItem();
            Kanvas k = tab.canvas;

            k.renderable.remove(curr);
            System.out.println(k.renderable);

            k.redraw();

            EntityView.this.list.getItems().remove(curr);

            ObservableList<Entity> temp = FXCollections.observableList(k.renderable);
            EntityView.this.list.setItems(temp);
        }   
    });
}

public void createContextMenu(最终实体货币,MouseEvent me){
MenuItem[]项={new MenuItem(“编辑类型”),new MenuItem(“删除”)};
ContextMenu=新的ContextMenu(项目);
show(list,me.getScreenX(),me.getScreenY());
项[1]。setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent arg0){
CanvasTab选项卡=(CanvasTab)core.canvasTabbedPane.getSelectionModel().getSelectedItem();
Kanvas k=tab.canvas;
k、 可渲染。删除(当前);
System.out.println(k.renderable);
k、 重画();
EntityView.this.list.getItems().remove(curr);
ObservableList temp=FXCollections.ObservableList(k.renderable);
EntityView.this.list.setItems(临时);
}   
});
}
这是关联菜单:


在ObservableList而不是ArrayList中备份项目。将此ObservableList设置为listview的项,然后从ObservableList中删除该项就足够了。它将反映到listview项目中。如果需要,以后可以发布一些示例代码。您是否使用自定义单元格工厂?可能重复(我猜,但我认为这是您的问题),请发布EntityView.this.list的ListCell代码