JavaFX: bind disable property of a button to ObservableList size
Asked Answered
E

2

14

I have a TableView and I would like to bind the disable property of a Button with the size of the ObservableList model of the table. In particular, I would like to disable the button when the size of the ObservableList is grater than 2.

How can I achieve that?

To disable another button when no row is selected in table I used

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

Is there a similar way?

Elum answered 16/6, 2014 at 14:39 Comment(0)
C
22

There are factory methods for useful bindings in the Bindings class. In your case f.i.:

button.disableProperty().bind(Bindings.size(items).greaterThan(2));
Customs answered 17/6, 2014 at 9:21 Comment(0)
M
2

You can do something like that

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;
    }
});
Matronly answered 16/6, 2014 at 15:23 Comment(2)
What about memory leaks? I have to call unbind? Where?Elum
Personnaly I do my bindings on a configure() method, and unbind everything on unconfigure() method. It's depend how your program is done but my unconfigure are called when I changed the view to another. It's the same if you add listner, you have to remove themMatronly

© 2022 - 2024 — McMap. All rights reserved.