Re: Does JavaFX lack a public Property.getObservable() method?
Thank you both of you for some good tips. I will try those approached instead. Randahl On 12 Sep 2014, at 14:37, Tomas Mikula wrote: > 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 > 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 >>> >>> >>> >> Randahl Fink Isaksen Inventor / Software architect / Java expert Owner of ROCK IT Mobile +45 26 25 88 84 Skype randahl Twitter @r4nd4hl
Re: Does JavaFX lack a public Property.getObservable() method?
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 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 >> >> >> >
Re: Does JavaFX lack a public Property.getObservable() method?
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
Does JavaFX lack a public Property.getObservable() method?
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