好吧,看来我被其中一个最简单的ListView实现所困扰。几天后,我发现无法正确重新分配JavaFX ListView。我正在努力使EntityView完全动态化,能够在需要时通过ContextMenu删除元素。所以我有一个由ArrayList填充的ListView,我们将其称为“可渲染”。当您在上下文菜单中选择“删除”时,它会从可渲染列表中删除实体,这也恰好是我右键单击的列表单元格的“值”。之后,我希望刷新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);
}
});
}
这是上下文菜单: