JavaFX: привязать свойство отключения кнопки к размеру ObservableList

У меня есть TableView, и я хотел бы связать свойство отключения Button с размером модели ObservableList таблицы. В частности, я хотел бы отключить кнопку, когда размер ObservableList больше 2.

Как я могу этого добиться?

Чтобы отключить другую кнопку, когда в таблице не выбрана строка, которую я использовал

editRoadButton.disableProperty().bind(roadsTable.getSelectionModel().selectedItemProperty().isNull());

Есть ли аналогичный способ?


person Giorgio    schedule 16.06.2014    source источник


Ответы (2)


В классе Bindings есть фабричные методы для полезных привязок. В вашем случае f.i.:

button.disableProperty().bind(Bindings.size(items).greaterThan(2));
person kleopatra    schedule 17.06.2014

Вы можете сделать что-то подобное

ListProperty<String> list = new SimpleListProperty<>(FXCollections.<String>emptyObservableList());
Button foo = new Button();

foo.disableProperty().bind(new BooleanBinding() {
    {
        bind(list);
    }

    @Override
    protected boolean computeValue() {
        return list.size() > 2;
    }
});
person agonist_    schedule 16.06.2014
comment
А как насчет утечек памяти? Я должен позвонить развязать? Где? - person Giorgio; 17.06.2014
comment
Лично я привязываюсь к методу configure() и отвязываю все по методу unconfigure(). Это зависит от того, как выполняется ваша программа, но мой unconfigure вызывается, когда я изменил вид на другой. То же самое, если вы добавляете листнер, вы должны удалить их - person agonist_; 17.06.2014