Finalmente, após oito meses de trabalho e contratempos, está disponível a versão 3.0-EA3 do genesis. Toda a documentação foi reformulada e há versões em inglês e português.
As novidades mais legais dessa versão são o binding Swing e o suporte a anotações do Java 5 (que também funcionam com Java 1.4 da mesma maneira). O conceito do binding no genesis é único porque você pode trabalhar com JavaBeans sem amarrar a lógica da sua aplicação a API gráfica (Swing e Thinlet, no momento). Por exemplo, pode-se codificar um form assim :
@Form
public class LoginForm {
private String usuario;
private String senha;
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@Action
public void login() {
System.out.println(usuario);
System.out.println(senha);
}
@Action
public void limpar() {
setUsuario(null);
setSenha(null);
}
}
E ligá-lo a uma interface gráfica em Swing assim:
@ViewHandler
public class LoginSwingView extends JDialog {
public LoginSwingView() {
super(new JFrame(), "Login");
initComponents();
SwingBinder binder = new SwingBinder(this, new LoginForm());
binder.bind();
}
private void initComponents() {
getContentPane().setLayout(new GridLayout(2, 1));
JPanel panelDados = new JPanel();
panelDados.setLayout(new GridLayout(2, 2, 5, 5));
JLabel labelUsuario = new JLabel();
labelUsuario.setText("Usuário");
panelDados.add(labelUsuario);
JTextField usuario = new JTextField();
usuario.setName("usuario");
panelDados.add(usuario);
JLabel labelSenha = new JLabel();
labelSenha.setText("Senha");
panelDados.add(labelSenha);
JPasswordField senha = new JPasswordField();
senha.setName("senha");
panelDados.add(senha);
getContentPane().add(panelDados);
JPanel panelBotoes = new JPanel();
JButton login = new JButton();
login.setText("Login");
login.setName("login");
panelBotoes.add(login);
JButton limpar = new JButton();
limpar.setText("Limpar");
limpar.setName("limpar");
panelBotoes.add(limpar);
getContentPane().add(panelBotoes);
pack();
setLocationRelativeTo(null);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new LoginSwingView().setVisible(true);
}
});
}
}
Ou seja, diferente de outros frameworks, o genesis não requer o uso de componentes proprietários e você pode usar tranquilamente o Matisse ou o VEP para desenhar suas telas, bastando setar o name
dos componentes de acordo com o seu form. Mais detalhes sobre como o binding funciona podem ser encontrados na documentação.
Ficou muito legal esse binding. Enquanto não sai um Web binding, poderia ter um empty-web-project super-simples que aproveitasse esses forms.
Há como fazer o binding com outras propriedades dos componentes, como ‘enabled’, ‘selected’? Por exemplo chamar ‘form.setNome_enabled(false)’ para desabilitar um textfield. Isto seria perfeito para fazer ‘subcutaneous testing’ da lógica das telas sem ter que instanciar componente visual algum, já que toda a lógica poderia ser feita diretamente no bean.
Uma outra dúvida: quais as dependências mínimas para rodar a aplicação no cliente? Sem banco, sem thinlet, só swing+genesis. Tenho que embutir o runtime do werkz? jxpath? beanutils?
[...] Começaram a aparecer dúvidas sobre o post que fiz a respeito do binding Swing suportado pelo genesis. Aproveito para responder aqui as perguntas do Tetsuo, para que fique mais visível para quem visita o blog: Há como fazer o binding com outras propriedades dos componentes, como ‘enabled’, ’selected’? Por exemplo chamar ‘form.setNome_enabled(false)’ para desabilitar um textfield. Isto seria perfeito para fazer ’subcutaneous testing’ da lógica das telas sem ter que instanciar componente visual algum, já que toda a lógica poderia ser feita diretamente no bean. [...]
Hello, my name is Alex, i’m a newbie here. I really do like your resource and really interested in things you discuss here, also would like to enter your community, hope it is possible:-) Cya around, best regards, Alex!