Para usar as classes do projeto acesse a pagina Towel Project desse blog para baixar o projeto.
Bem.. essa idéia surgiu em uma conversa com o Felix (Felagund do GUJ) que também aderiu ao projeto.
Como adoro annotations, criei mais uma para isso, a annotation Action que tem dois atributos.
String method() default “” – Caso queira mapear um botão para simplesmente invocar um método quando pressionada só é necessario passar o nome dele nesse atributo
Class<? extends ActionListener> listener() default ActionListener.class – Caso voce queira que um ActionListener seja chamado voce precisa passar o .class da classe que implementa ele para esse atributo.
Aproveitei o código do artigo que fiz para o binder apenas modificando o modo que crio as ações para os botões.
import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import com.towel.awt.ann.Action; import com.towel.awt.ann.ActionManager; import com.towel.bind.Binder; import com.towel.bind.annotation.AnnotaddedBinder; import com.towel.bind.annotation.Bindable; import com.towel.bind.annotation.Form; @Form(Pessoa.class) public class PessoaForm extends JFrame { @Bindable(field = "nome") private JTextField nome; @Bindable(field = "idade", formatter = IntFormatter.class) private JTextField idade; @Bindable(field = "vivo") private JCheckBox vivo; private Binder binder; @Action(method = "add")//Mapeando a ação para o método add private JButton add; @Action(listener = Listener.class)//Mapeando a ação para o listener private JButton load; public PessoaForm() { super("PessoaForm"); nome = new JTextField(20); idade = new JTextField(20); vivo = new JCheckBox("Vivo?"); add = new JButton("Add"); load = new JButton("Load"); setLayout(new GridLayout(5, 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); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); binder = new AnnotaddedBinder(this); new ActionManager(this);// Mapeia as @Action para os JButtons. } public static void main(String[] args) { new PessoaForm().setVisible(true); } // Listener mapeado para o botão "load" private class Listener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Pessoa pessoa = new Pessoa(); pessoa.setNome("Marky"); pessoa.setIdade(18); pessoa.setVivo(true);// Claro binder.updateView(pessoa); } } // Metodo mapeado para o botão "add" private void add() { Pessoa pessoa = new Pessoa(); binder.updateModel(pessoa); pessoa.printAttrs(); } // IntFormatter sera usado para transformar a String em numero. public static class IntFormatter implements mark.utils.bean.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"; } } }
2 Pingback