Hi Randahl,

if on button click you only want to update an external boolean
property, bidirectional binding suggested by Martin should be all you
need.

If the problem is more complex, it might be useful to recognize that
your toggle button serves two distinct functions:
1. It reflects the state (on/off) of an external object.
2. It manipulates an external object.

Treat these functions separately, i.e. on button click, don't change
the button value (and thus appearance) directly, but manipulate the
observed object.

    // observe external object
    button.valueProperty().bind(externalObject.stateProperty());

    // manipulate external object
    button.setOnAction(event -> {
        if(button.getValue()) {
            externalObject.turnOff();
        } else {
            externalOBject.turnOn();
        }
    });

Your original button behavior of just changing the value (and thus
appearance) is achieved by

    button.setOnAction(event -> button.setValue(!button.getValue()));

Best,
Tomas

On Fri, Sep 12, 2014 at 1:08 PM, Martin Sladecek
<martin.slade...@oracle.com> wrote:
> Hi Randahl,
> why don't you use bidirectional binding for this purpose?
>
> -Martin
>
>
> On 09/12/2014 01:04 PM, Randahl Fink Isaksen wrote:
>>
>> I have noticed the lack of a getObservable() method of the property class,
>> and I have come across a use case which might justify such a method, so I
>> would like to discuss whether posting a new Jira issue for this is
>> justified.
>>
>> I have implemented a simple toggle button with two states, on and off. The
>> toggle button has a SimpleBooleanProperty value, and when the user switches
>> the toggle button the value is negated.
>>
>> Now, in some cases I would like to bind the valueProperty to some
>> observable boolean in my app, so that whenever that observable boolean is
>> true, the button reflects that by switching to on. However, the problem is
>> that if I bind the SimpleObjectProperty value to an observable boolean
>> value, and then click the button to toggle it, a JavaFX exception tells me
>> that I cannot negate the boolean value, since it is now bound.
>>
>> In such cases, I think it makes sense to have my toggle button change the
>> state of the value it is bound to instead. But since the
>> SimpleBooleanProperty does not have a getObservable() method, I have no way
>> of accessing the value observed.
>>
>> Does this justify adding a public getObservable method to class Property?
>>
>> Yours
>>
>> Randahl
>>
>>
>>
>

Reply via email to