Desenvolvimento - Java
Conhecendo o SWT
O Eclipse tornou-se famoso não apenas por ser uma IDE de primeira qualidade, desenvolvido com a extensibilidade em mente, mas também porque ele tinha uma interface gráfica levíssima e que era igual a do sistema operacional onde ele estivesse executando...
por Maurício Linhares de Aragão JuniorO Eclipse tornou-se famoso não apenas por ser uma IDE de primeira qualidade, desenvolvido com a extensibilidade em mente, mas também porque ele tinha uma interface gráfica levíssima e que era igual a do sistema operacional onde ele estivesse executando, diferentemente do conjunto de componentes gráficos do Java, o Swing, que tinha uma “cara” própria e algumas opções que fazem com que ele “imite” a aparência de um sistema operacional qualquer. Mas essa possibilidade de imitar ainda não era a melhor escolha, porque vários sistemas operacionais tem a opção para aplicar-se temas gráficos e as aplicações Swing não tinham como acompanhar estas mudanças.
Esta interface gráfica do Eclipse foi “separada” do código principal da IDE e tornou-se o que se conhece hoje como SWT, o Standard Widget Toolkit. Ele é uma camada de componentes sobre os componentes padrão do sistema operacional, um botão SWT é na verdade um botão do seu sistema operacional, então, se você aplicar um tema que mude a cor ou a forma do seu botão, o botão SWT vai se modificar conforme o novo tema. Aplicações SWT sempre tem a aparência do sistema operacional que elas executam porque elas utilizam diretamente estes componentes para gerar a visualização na tela. Esta abordagem diferente do Swing, faz com que as aplicações possam se relacionar melhor com o ambiente onde elas estão executando, tornando-as mais naturais para os usuários e até mesmo mais leves, já que ações que exigem muito processamento (como desenhar componentes visuais na tela) são feitos diretamente pelas primitivas do SO e não pela máquina virtual do Java.
Preparando o ambiente
Para seguir esse material você precisa fazer o download da biblioteca do SWT da página do projeto em http://www.eclipse.org/swt/. Procure por “Releases” e depois “Stable”, você deve ver as opções de sistemas operacionais com binários compilados, basta selecionar o seu sistema operacional e fazer o download do arquivo para o seu sistema. Depois de feito o download, descompacte o arquivo e você deve encontrar um arquivo chamado “swt.jar”, esse é o arquivo que contém a biblioteca de componentes e deve ser colocado no classpath da sua aplicação para poder acessar os objetos da biblioteca.
Além desse arquivo você deve encontrar também um conjunto de bibliotecas nativas (no Windows são alguns arquivos com a extensão .DLL, no Linux são arquivos .SO) que também devem ser adicionados a ao classpath da sua aplicação. Se você está utilizando o Eclipse para desenvolvimento, não é necessário fazer o download da biblioteca, pois ela já faz parte do “pacote” do Eclipse e pode ser adicionada a projetos dentro da IDE. Para adicionar o SWT em um projeto do Eclipse 3.2 basta clicar na pasta do projeto com o botão direito, ir pra opção “Build Path”, depois selecionar “Add Library” e adicionar a biblioteca “Standard Widget Toolkit (SWT)”.
Dando os primeiros passos
Agora que já estamos com o ambiente pronto para iniciar, vejamos nosso primeiro exemplo de aplicação SWT, é uma simples janela com um botão que conta quantas vezes é clicado, mas que vai nos trazer várias das noções de como é desenvolver uma aplicação real em SWT.
Listagem 1 – org.maujr.ExemploSWT.java
package org.maujr;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
class ExemploSWT {
private static int selecoes = 0;
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN |
"Aprendendo SWT");
button.setText("Clique Aqui Agora!!!");
button.addSelectionListener(new SelectionAdapter() {
@Override
Button buttonClicked = (Button) event.getSource();
selecoes += 1;
buttonClicked.setText(String.format("Fui clicado %s
Como você já percebeu, o código do nosso exemplo é
curto e simples, inicialmente, nós pegamos o objeto Display padrão para a aplicação, que é
o objeto que faz a ponte entre o sistema de envio de eventos do sistema
operacional para os objetos da sua aplicação Java. Ele é o objeto responsável
por transformar as chamadas a métodos em objetos Java normais
em chamadas a primitivas do sistema operacional, através de uma referência ao
objeto OS, que representa o sistema operacional no qual aplicação está sendo
executada. Este objeto OS contém diversas implementações em métodos nativos para
as chamadas nos componentes visuais reais. É no Display que também se encontram
informações sobre o ambiente onde a aplicação está executando, como a quantidade
de monitores disponíveis, os tamanhos recomendados para certos componentes
visuais e outras informações mais avançadas, que no momento não nos
interessam. em SWT – O objeto
Shell Terminando com o Display, nós chegamos ao nosso primeiro
“componente visual” do SWT, o Shell,
que representa uma janela no sistema operacional. Essa janela pode ser qualquer
modelo de janela que os vários sistemas operacionais para os quais o SWT tem
versões compatíveis, desde a janela principal da aplicação, com um título, os
botões para maximizar, minimizar e fechar até telas de diálogo sem bordas de
título. Para definir qual o tipo da janela,
nós utilizamos um modo comum para criar objetos em toda a biblioteca SWT, os
“style bits” (algo como “bits de estilo”) que informam ao componente visual como
ele deve se mostrar. Os “style bits” são conjuntos de constantes que podem ser
aplicadas sobre os componentes visuais para que eles assumam características
variadas e estão todos declarados na classe SWT. Nela você encontra todos os “style
bits” utilizados na biblioteca. Para saber quais são e o que fazem os “style
bits” de um componente visual, você deve ver o “Javadoc” do componente, na
documentação sempre existe a informação completa de quais são os estilos
aplicáveis a um componente e o que cada estilo destes
faz. No caso da nossa janela, nós queríamos
que ela fosse uma janela principal do sistema (aquela com os botões de
maximizar, minimizar, fechar e uma barra de título), então criamos uma nova
janela (passando o Display onde a
janela deve aparecer como parâmetro) com os seguintes “style
bits”: SWT.TITLE SWT.MIN SWT.MAX SWT.RESIZE
Os operadores podem ser combinados com o uso do operador “ou” ( “|”) em Java. Se todas as opções forem suportadas e não entrarem em conflito nenhum, todas elas são aplicadas ao componente em questão. Como você viu, no nosso exemplo da criação do Shell, nós definimos os seguintes estilos:
· SWT.CLOSE – Para adicionar o botão de fechar a janela
· SWT.TITLE – Para adicionar uma barra de título a janela
· SWT.MIN – Para adicionar o botão de minimizar a janela
· SWT.MAX – Para adicionar o botão de maximizar a janela
· SWT.RESIZE – Para que o usuário possa redimensionar o tamanho da janela conforme a sua necessidade
Reunindo os vários estilos usando o operador “|” (or/ou), nós fazemos a janela principal padrão dos programas, que tem os botões de maximizar, minimizar, fechar, uma barra de título e ainda pode ser redimensionada.
Outro detalhe importante do modo de trabalho do SWT, é que, diferentemente de outras bibliotecas de componentes (como o Swing), os objetos não são adicionados diretamente aos seus pais (como o método “addComponent()”), os pais de cada componente devem ser passados nos seus construtores. Estranho? Nem tanto. Como o SWT é baseado nas bibliotecas nativas do sistema operacional ele está sempre fazendo acesso a recursos de baixo nível e assim que um componente é instanciado também é criada a referência para o componente real da plataforma nativa, então, para não ter que se preocupar com o ciclo de vida dos componentes nativos, só é possível criar componentes SWT passando a referência do seu componente pai, o que você percebe olhando para o código de instanciação do botão:
while (!shell.isDisposed()) {
display.sleep();
Figura
1 – Imagem do exemplo executando.
Conclusão
O SWT é uma incrível biblioteca de componentes visuais para aplicações desktop que garantem ter a mesma aparência dos outros componentes visuais do sistema operacional, diferentemente do Swing que mesmo parecendo ser igual, não consegue ter o mesmo feeling dos componentes padrão do sistema. Você viu um exemplo simples, mas que já traz algumas das características principais do SWT, como o uso de “style bits” e os componentes sendo instanciados passando como referência o seu componente pai.
Referências
Clayberg, Eric; Rubel, Dan. 2006. Eclipse – Building Commercial-Quality Plugins. The Eclipse Series. 2º Edition. Addison-Wesley - Pearson Education.
McAffer, Jeff; Lemieux, Jean-Michel; 2006. Eclipse Rich Client Platform – Designing, Coding, and Packaging Java Applications. The Eclipse Series. Addison-Wesley – Pearson Education.
D’Anjou, Jim; Fairbrother, Scott; Kehn, Dan; Kellerman, John; McCarthy, Pat; 2005. The Java Developer’s Guide to Eclipse. Second Edition. Addison-Wesley – Pearson Education.
Scarpino, Matthew; Holder, Stephen; NG, Stanford; Mihalkovic, Laurent; 2005. SWT/JFace in Action – How to design graphical applications with Eclipse 3.0. Manning Publications.
SWT Website - http://www.eclipse.org/swt/