Foi lançada alguns dias atrás a nova release do genesis, a 3.0-EA4. Uma das novidades é o binding SWT, expandindo o suporte desktop do framework, que já inclui Swing (desde a 3.0-EA3) e Thinlet.
O princípio do binding é o mesmo usado pelas outras tecnologias: você constrói sua interface normalmente, usando o Visual Editor do Eclipse ou codificando na mão mesmo, com o único requerimento de definir o nome dos seus componentes igual ao da propriedade ou ação com o que você deseja ligá-lo. No caso do SWT, usamos a propriedade data
dos componentes como seu nome, mas isto pode ser mudado.
Escrever uma tela de login em SWT com o genesis é bem fácil. Primeiro definimos o form, que é o mesmo independente da tecnologia de GUI utilizada:
@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 depois o código que constrói a GUI SWT e faz a ligação com o form:
@ViewHandler
public class LoginSWTView {
private Shell shell = null;
private Composite composite = null;
private Label labelUsuario = null;
private Text usuario = null;
private Label labelSenha = null;
private Text senha = null;
private Composite compositeBotoes = null;
private Button limpar = null;
private Button login = null;
public LoginSWTView() {
createShell();
SWTBinder binder = new SWTBinder(shell, new LoginForm(), this);
binder.bind();
}
private void createShell() {
shell = new Shell();
shell.setText("Login");
createComposite();
createCompositeBotoes();
shell.setLayout(new GridLayout());
shell.pack();
}
private void createComposite() {
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(gridData);
composite.setLayout(gridLayout);
labelUsuario = new Label(composite, SWT.NONE);
labelUsuario.setText("Usuário");
usuario = new Text(composite, SWT.BORDER);
usuario.setData("usuario");
labelSenha = new Label(composite, SWT.NONE);
labelSenha.setText("Senha");
senha = new Text(composite, SWT.BORDER | SWT.PASSWORD);
senha.setData("senha");
}
private void createCompositeBotoes() {
RowLayout rowLayout = new RowLayout();
rowLayout.fill = true;
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.END;
gridData.verticalAlignment = GridData.FILL;
compositeBotoes = new Composite(shell, SWT.NONE);
compositeBotoes.setLayoutData(gridData);
compositeBotoes.setLayout(rowLayout);
limpar = new Button(compositeBotoes, SWT.NONE);
limpar.setText("Limpar");
limpar.setData("limpar");
login = new Button(compositeBotoes, SWT.NONE);
login.setText("Login");
login.setData("login");
}
public void display() throws Exception {
final Display display = Display.getDefault();
Rectangle bounds = display.getBounds();
shell.setLocation(bounds.x
+ (bounds.width - shell.getBounds().width) / 2, bounds.y
+ (bounds.height - shell.getBounds().height) / 2);
shell.open();
shell.forceActive();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) throws Exception {
new LoginSWTView().display();
}
}
Outra novidade é que, atendendo aos pedidos de diversos usuários, agora é possível utilizar a parte client do genesis simplesmente colocando os jars no classpath. O Edgar postou no seu blog, de forma bem didática, como funciona o binding e como utilizá-lo com Swing num sistema de locadora. Vale a pena conferir.
Caso tenham sugestões ou dúvidas a respeito do genesis, podem perguntar aqui no blog ou na lista de discussão do projeto, conforme explicado na doc em português do framework.
Muito legal o Genesis Mister M. Parabéns pelo seu trabalho
Obrigado, Leonardo, mas diversas outras pessoas merecem crédito, como o Allan Jones, Raphael Bettio, Liaw Mike, Pablo Madril e outros que ajudam, como o Edgar Silva.
Estou interessado no Genesis, porem nao achei um tutorial para instalação e configuração…
Ola Sandokan,
Verifique se a página “Desenvolvendo com o genesis para desktops” não contém as instruções que você deseja. Caso tenha alguma dúvida, você pode perguntar na lista de usuários do genesis, usuarios@genesis.dev.java.net.
obrigado Michael, foi barberada minha… tava na cara o tutorial…
Michael,
no artigo do EDGAR sobre SWING, os códigos não aparecem, fica como se tudo tivesse criptografado.
Ex:
PLAIN TEXT
CODE:
1- cHVibGljIGNsYXNzIEZpbG1lIHsg
vc sabe pq ?