JavaFX-从TableView添加/删除Cell ObservableValue侦听器

时间:2016-03-17 04:18:34

标签: java javafx

当我致电TableColumn#getCellObservableValue()时,它会每次返回一个新的ObservableValue还是一个持久的,设置一个?

我问的原因是我正在尝试为Listener中的每个单元格的每个ObservableValue添加TableView<T>。我在ObservableValue<R>内的给定TableColumn<T,R>内维护每个HashMap<CellIdentity<R>,Listener>

CellIdentity<R>尝试使用ObservableValue<R>的标识来查找Listener。这样,如果我使用ListChangeListener来检测何时删除记录,我可以取消订阅单元格值侦听器并防止泄漏。

private static final class CellIdentity<R> {
    private final ObservableValue<R> cellValue;

    CellIdentity(ObservableValue<R> cellValue) {
        this.cellValue = cellValue;
    }

    @Override
    public boolean equals(Object other) {
        return this.cellValue == ((CellIdentity<?>)other).cellValue;
    }

    @Override
    public int hashCode() {
        return System.identityHashCode(cellValue);
    }
}

问题是当我把这个TableColumn#getCellObservableValue()包裹在CellIdentity<R>里面,把它和Listener放在HashMap中时,当我这样做时,我会得到空值get()稍后用同样的方法把它放在()它。我无法检索听众。

如何在Listenr中为每个单元格值添加TableColumn,以后能够检索它以将其删除?

0 个答案:

没有答案