gpt4 book ai didi

java - TableView和ListView的删除是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 03:15:13 24 4
gpt4 key购买 nike

正如我所见,我们必须重写 equalshashCode 方法才能从 java Collection 的 java.util.List 中删除自定义类的对象,或者其他类似。

但我想知道TableViewListViewremove是如何工作的?最近,我成功从 TableViewObservableList 中删除了自定义类 (Person) 的对象(在查看 ObservableList 之后) code> 的 remove 方法我意识到它是从 java.util.List 继承 remove(Object) 方法)

那么如何通过调用来删除TableView的行呢? table.getItems().remove(row.getItem()) 行包含 Person 类的对象数据,并且 Person 类没有重写 equals(object); hashCode(); 方法

这是关于这种困惑的完整代码。

public class RowMenu implements Callback<TableView<Person>, TableRow<Person>> {

@Override
public TableRow<Person> call(TableView<Person> table){
final TableRow row = new TableRow();
final ContextMenu contextMenu = new ContextMenu();
final MenuItem removeMenuItem = new MenuItem("Remove");
removeMenuItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println(row.getItem());
System.out.println(table.getItems().remove(row.getItem()));

}
});
contextMenu.getItems().addAll(removeMenuItem);
row.setContextMenu(contextMenu);
row.contextMenuProperty().bind(
Bindings.when(row.emptyProperty())
.then((ContextMenu)null)
.otherwise(contextMenu)
);
return row;
}
}

最佳答案

默认比较仅使用对象标识;即,如果您不重写 equals(...),则 object.equals(anotherObject) 相当于 object == anotherObject

在这种情况下,如果引用对象list.remove(object)将从list中删除 > 等同于列表中的引用。

在这种情况下:

table.getItems().remove(row.getItem())

显然会起作用。 row.getItem() 返回表行显示的项目,它与 TableView 的数据后备列表中保存的对象完全相同。 ( TableView 机制将引用从 TableView 的支持列表传递到表行的 updateItem(...) 方法。)

如果您想为 remove(...) 提供一个与要删除的对象等于的参数,则只需担心重写 equals 即可,但可能不是对内存中实际同一对象的引用。

关于java - TableView和ListView的删除是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com