Mixing property language support and bean bindings
Recently, Shannon posts version 1.0 of beanbindings, even
if this version is not ready for production use,
it is stable enough to create a small demo mixing
property language support and
beanbindings.
The idea is to create a bean (here MyBean) with a bound
property (label) and to bind this property to two different
textfields.

Defining a bean
Because i use the property support directly integrated in the language,
defining such bean is easy. AbstractBean provides the
basic support for managing property change listeners.
public static class MyBean extends AbstractBean {
property String label bound;
private <B,T> void propertyChanged(java.lang.Property<B,T> property,Object oldValue,Object newValue) {
firePropertyChange(property,oldValue,newValue);
}
@Override
public String toString() {
return "label "+label;
}
}
Wrap the property to someting understandable
By default bean bindings only supports two kinds of property
bean property that uses bean introspector and
EL property that uses EL script but
the framework is easily extensible and let you create
your own property implementation.
So i've created a new kind of property (here LangProperty)
that exposes a java.lang.Property as a property understandable
by the bindings framework.
And mix
And now mixing the language support and
the API together is as simple as that:
LangProperty<MyBean,String> labelProperty =
LangProperty.create(MyBean#label);
JLabel label = new JLabel("Label:");
JTextField field = new JTextField(20);
Bindings.createAutoBinding(READ_WRITE,
bean, labelProperty,
field, BeanProperty.create("text")).bind();
JLabel anotherLabel = new JLabel("Another label:");
JTextField anotherField = new JTextField(20);
Bindings.createAutoBinding(READ_WRITE,
bean, labelProperty,
anotherField, BeanProperty.create("text")).bind();
The notation sharp ('#') is used to get an objet
typed java.lang.Property that allow to get and set
the value of the property.
Want to test it
You want to test it by yourself, ok, here a zip containing
the code, the beanbindings jar and the javac.jar patched to
understand properties.
Download properties-meets-bindings.zip
Use this line to compile
java -Xbootclasspath/p:javac.jar com.sun.tools.javac.Main -XDallowProperty -cp beansbinding-1.0.jar *.java
And this one to execute
java -Xbootclasspath/p:javac.jar -cp .:beansbinding-1.0.jar Sample
You must include javac.jar at runtime only because it
contains the class java.lang.Property
and i am too lazy to create two jars.
WARNING, i have re-written the bound property support in the patched
compiler last night so i think it will not work
on another example :)
Cheers,
Rémi
- Login or register to post comments
- Printer-friendly version
- forax's blog
- 1678 reads





