JavaFx:TableView-取消绑定所有属性

JavaFx:TableView-取消绑定所有属性,java,javafx,Java,Javafx,我有一个TableView,我为它创建的列如下: TableColumn<Foo,String> fieldColumn=new TableColumn("field"); fieldColumn.setCellValueFactory(data->data.getValue().getFieldProperty()); tableView.add(fieldColumn); TableColumn fieldColumn=新的TableColumn(“字段”); field

我有一个
TableView
,我为它创建的列如下:

TableColumn<Foo,String> fieldColumn=new TableColumn("field");
fieldColumn.setCellValueFactory(data->data.getValue().getFieldProperty());
tableView.add(fieldColumn);
TableColumn fieldColumn=新的TableColumn(“字段”);
fieldColumn.setCellValueFactory(数据->数据.getValue().getFieldProperty());
tableView.add(字段列);

现在我想销毁我的
tableView
,但我想继续使用所有
foos
。这就是为什么我想从表/列中取消绑定
foos
”属性。如何操作?

如果删除
TableColumn
s,侦听器将在下一次布局过程中删除。这允许您通过清除列并调用
layout()
,删除由
TableView
添加的侦听器:

Item
类,用于获取属性的侦听器数量

public class Item {

    private final Set<Object> listeners = new HashSet<>();

    public Item(String value) {
        this.value.set(value);
    }

    private final StringProperty value = new SimpleStringProperty() {

        @Override
        public void removeListener(ChangeListener<? super String> listener) {
            super.removeListener(listener);
            listeners.remove(listener);
        }

        @Override
        public void addListener(ChangeListener<? super String> listener) {
            super.addListener(listener);
            listeners.add(listener);
        }

        @Override
        public void removeListener(InvalidationListener listener) {
            super.removeListener(listener);
            listeners.remove(listener);
        }

        @Override
        public void addListener(InvalidationListener listener) {
            super.addListener(listener);
            listeners.add(listener);
        }

    };

    public final StringProperty valueProperty() {
        return this.value;
    }

    public int getListenerCount() {
        return listeners.size();
    }

}
打印侦听器计数
,然后按
清除列
按钮将产生以下输出:

listeners: 3
after clear columns: 0
listeners: 3
after clear columns: 0