TableView和ListView的删除方式是如何工作的?

时间:2016-11-04 16:40:38

标签: java listview javafx tableview

正如我所看到的,我们必须覆盖equalshashCode方法,以便从java Collection的java.util.List或类似的其他人中删除自定义类的对象。

但我想知道TableViewListView' remove是如何运作的?最近,我成功删除了(Person) TableView中的自定义类ObservableList对象(查看ObservableList后{{ {1}}方法我意识到它是从remove继承remove(Object)方法

然后如何通过调用删除TableView的行。 java.util.List行包含Person类的对象数据,Person类没有包含table.getItems().remove(row.getItem())equals(object);方法

以下是关于这种混淆的完整代码。

hashCode();

1 个答案:

答案 0 :(得分:2)

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

在这种情况下,如果引用list.remove(object)与列表所持的引用完全相同,row将从list中删除object

在这种情况下:

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

显然会奏效。 row.getItem()返回表行显示的项,这是在表视图的数据备份列表中保存的完全相同的对象。 (表视图机制将表视图的支持列表中的引用传递给表行的updateItem(...)方法。)

如果要为要删除的对象提供remove(...)的{​​{1}}参数,则只需要担心覆盖equals,但可能不是对实际相同对象的引用在记忆中。