|
|
||
Rémi Forax's BlogSeptember 2007 ArchivesMixing property language support and bean bindingsPosted by forax on September 24, 2007 at 03:14 PM | Permalink | Comments (21)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 beanBecause 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 understandableBy 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 mixAnd 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.
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,
| ||
|
|