Olá. Demorei um tempo mas agora o Binder esta totalmente reformulado.

Essa versão pode ser obtida baixando o jar pela pagina Towel Project.

Para usar da antiga forma apenas instancie um NamedBinder invés de Binder em si.

Mas agora o novo.

Para fazer o bind de um objeto para uma tela nós precisamos indicar que a classe sera um formulario e anotar os componentes com os dados do atributo que vamos fazer a união.

Por exemplo vou usar a classe Pessoa.

public class Pessoa {
	private String nome;
	private int idade;
	private boolean vivo;// sem ideias pra outro atributo boolean o.0
	public void printAttrs() {// Método que imprime no console os atributos de
		// pessoa
		System.out.println("Nome: " + getNome());
		System.out.println("Idade: " + getIdade());
		System.out.println("Vivo?: " + vivo);
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}
	public int getIdade() {
		return idade;
	}
	public boolean isVivo() {
		return vivo;
	}
	public void setVivo(boolean vivo) {
		this.vivo = vivo;
	}
}

Usamos a anotação @Form para indicar qual classe vamos unir com este formulario e anotação @Bindable para indicar qual atributo da classe esse campo indica.

Parametros do @Bindable
String field: que indica o atributo da classe. (parametro obrigatorio)
Class handler: forma que sera acessado o campo (opcional, default é FieldHandler)
Class formatter: formatter para o campo, caso precise ser formatado ou transformado para outro tipo de atributo se não String (opcional, default é o DefaultFormatter)

Agora no formulario.

import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
import com.towel.bean.Formatter;
import com.towel.bind.Binder;
import com.towel.bind.annotation.*;
@Form(Pessoa.class)
// Form para Pessoa
public class PessoaForm extends JFrame {
	@Bindable(field = "nome")
	private JTextField nome;
	@Bindable(field = "idade", formatter = IntFormatter.class)
	private JTextField idade;
	@Bindable(field = "vivo")
	// o Binder assume que o JCheckBox trata-se de um atributo boolean
	private JCheckBox vivo;
	private Binder binder;
	public PessoaForm() {
		super("PessoaForm");
		nome = new JTextField(20);
		idade = new JTextField(20);
		vivo = new JCheckBox("Vivo?");
		JButton add = new JButton("Add");
		JButton load = new JButton("Load");
		setLayout(new GridLayout(4, 2));
		add(new JLabel("Nome:"));
		add(nome);
		add(new JLabel("Idade:"));
		add(idade);
		add(new JLabel());// Por causa do GridLayout
		add(vivo);
		add(add);
		add(load);
		load.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				Pessoa pessoa = new Pessoa();
				pessoa.setNome("Marky");
				pessoa.setIdade(18);
				pessoa.setVivo(true);// Claro
				binder.updateView(pessoa);
			}
		});
		add.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				Pessoa pessoa = new Pessoa();
				binder.updateModel(pessoa);
				pessoa.printAttrs();
			}
		});
		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		binder = new AnnotatedBinder(this);
	}
	public static void main(String[] args) {
		new PessoaForm().setVisible(true);
	}
	// IntFormatter sera usado para transformar a String em numero.
	public static class IntFormatter implements Formatter {
		public Object format(Object obj) {
			Integer d = (Integer) obj;
			return d.toString();
		}
		public Object parse(Object obj) {
			return Integer.valueOf(Integer.parseInt((String) obj));
		}
		public String getName() {
			return "int";
		}
	}
}

Repare que rodando este código aparecera uma tela com estes campos e ao apertar o botão load as informações do objeto pessoa sera mostrado nos campos. E o método add coloca os valores dos campos no objeto e imprime o valor dos atributos.

Repare que não foi necessario varios sets para atualizar o objeto nem gets para atualizar a View.

Em breve vou unir um Validator no Binder para garantir a consistencia dos dados.

Até mais.