JFace DataBinding

TK-UI utilise JFace DataBinding pour synchroniser l'UI avec le DOM. Cette section explique les grand principes de JFace Databinding. Une fois cette section terminée vous pourrez voir des examples de DataBinding avec JFace :

Principe

Pour expliquer JFace DataBinding, prenons un example classqiue de Databinding : le binding entre le champs name d'une instance d'une classe Person et la propriété Text d'un JTextField.
package org.akrogen.tkui.samples.xhtml.model;

public class Person {

	private String name;

	public Person(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
		System.out.println("Person#setName(" + name + ")");
	}

}
Voici le code de binding JFace :
// 1. Create Realm
SwingRealm.createDefault();
Realm realm = SwingObservables.getRealm();

// 2. Create DataBindingContext
DataBindingContext context = new DataBindingContext(realm);

// 3.1 Creates Observable to observe the Text property of  JTextField
IObservableValue targetObservableValue = SwingObservables.observeText(
		textField, SwingEventConstants.Modify);
		
// 3.2 Creates Observable to observe the name property of Person instance		
IObservableValue modelObservableValue = BeansObservables.observeValue(
		person, "name");

// 4. Binding
context.bindValue(targetObservableValue, modelObservableValue, null,
		null);
Les étapes du binding JFace sont :
  1. Instancier un Realm qui permet entre autres de gérer le binding dans un environnement multi-thread.
  2. Instancier un DataBindingContext à partir du Realm. Le DataBindingContext est un container pour les bindings à enregistré.
  3. JFace DataBinding s'appuie sur la pattern Observable , autrement dit :
    • une instance IObservableValue permet d'observer la propriété Text du JTextField.
    • une instance IObservableValue permet d'observer la valeur du champs name de l'instance Person.
  4. La méthode bindValue permet de binder les 2 instances IObservableValue.