How to trigger property invalidation?

Will Hoover java.whoover at gmail.com
Fri Nov 2 11:46:39 PDT 2012


...or you could use a BeanPathAdapter that handles all your POJO field to
JFX property conversions for you (http://wp.me/P2rLDc-1s) and listen for
changes to the bean:

BeanPathAdapter<MyPojo> myPojoAdapter = new BeanPathAdapter<>(myPojo);
TextField tf = new TextField();
myPojoAdapter.bindBidirectional("myPojoField.anotherField.destinationField",
tf.valueProperty());
myPojoAdapter.fieldPathValueProperty().addListener(
 	new ChangeListener<FieldPathValue>() {
 	@Override
 	public void changed(
 		final ObservableValue<? extends FieldPathValue> observable,
 		final FieldPathValue oldValue, final FieldPathValue
newValue) {
 			System.out.println("Value changed from path: " +
oldValue.getPath() + " value: " + oldValue.getValue()
 				+ " to path: " + newValue.getPath() + "
value: " + newValue.getValue());
 		}
 	});

... another shameless plug ;)

-----Original Message-----
From: openjfx-dev-bounces at openjdk.java.net
[mailto:openjfx-dev-bounces at openjdk.java.net] On Behalf Of Martin Sladecek
Sent: Friday, November 02, 2012 2:13 PM
To: openjfx-dev at openjdk.java.net
Subject: Re: How to trigger property invalidation?

Hi Werner,
maybe an ObjectProperty isn't really what you are looking for. If you have
single bean with an non-observable property (BTW, how do you know it has
changed?) and you want to convert it to an FX property, why not using a
property of the same type as MyBean.myProperty and set FX property when
myProperty changes?

-Martin

On 11/02/2012 04:25 PM, Werner Lehmann wrote:
> Pavel,
>
> unfortunately I cannot listen to changes on myProperty because it is 
> not an observable property: MyBean is a domain bean provided by the 
> server and those beans do not have observable properties. Thanks for 
> the clarification though.
>
> In my case this means that I have to clone the bean everytime when a 
> slider position changes so that I can replace the property value I am 
> actually observing (the MyBean property). Seems to be quick enough but 
> is hardly elegant...
>
> Werner
>
> On 02.11.2012 15:50, Pavel Safrata wrote:
>> Hi Werner,
>> I think that you cannot trigger invalidation manually by design. The 
>> property holds a reference and should not be concerned with changes 
>> of anything else than the reference. There would be various issues 
>> with it, for example there are change notifications bound to the 
>> invalidation, which would produce a weird notification of the 
>> property being changed to the same value. I think the right approach 
>> is to listen directly on the myProperty instead of tweaking the
invalidation mechanism.
>>
>> With Regards,
>> Pavel
>>
>> On 2.11.2012 12:55, Werner Lehmann wrote:
>>> Hi,
>>>
>>> for an ObjectProperty<MyBean>, is it possible to trigger 
>>> invalidation manually when MyBean.myProperty changes? Basically I'd 
>>> like to call
>>> markInvalid() but it is private. And set() compares old and new 
>>> value by reference before invalidating, so won't see the change either.
>>>
>>> Workaround seems to be to copy the bean to another instance and 
>>> assign the new instance to the object property.
>>>
>>> Rgds
>>> Werner



More information about the openjfx-dev mailing list