O SWT inclui muitas funções complexas, mas bastam noções básicas do núcleo do sistema - widgets, disposições e eventos - para implementar aplicações úteis e robustas.
Quando se contribui com elementos de UI mediante extensões de área de trabalho de plataforma, a mecânica de arranque do SWT compete à área de trabalho e não ao utilizador.
Se compuser uma aplicação de SWT de raiz fora da área de trabalho, terá de conhecer mais da estrutura de aplicações de SWT.
Uma aplicação de SWT autónoma habitual tem a seguinte estrutura:
A porção de código seguinte é uma adaptação da aplicação org.eclipse.swt.examples.helloworld.HelloWorld2. DAdo que a aplicação só apresenta a cadeia "Hello World" (Hello World), não é necessário registar-se junto de eventos de widget.
public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); label.setText ("Hello_world"); label.setBounds (shell.getClientArea ()); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }
O Ecrã representa a ligação entre o SWT e o sistema da GUI da plataforma subjacente. Os ecrãs utilizam-se principalmente para gerir o ciclo de eventos da plataforma e controlar as comunicações entre o módulo da UI e outros módulos. (Consulte Questões de módulos para clientes para uma abordagem completa às questões de módulos da UI.)
Para a maioria das aplicações, poderá seguir o padrão que é utilizado supra. É necessário criar um ecrã antes de criar janelas, e é necessário inutilizar o ecrã quando fechar a shell. Não é necessário pensar mais no ecrã, a menos que esteja a conceber uma aplicação multi-módulo.
A Shell é uma "janela" gerida pelo gestor de janelas de plataforma do SO. As shells de nível superior são aquelas criadas como descendentes do ecrã. Estas janelas são usadas pelos utilizadores para mover, redimensionar, minimizar e maximizar enquanto trabalham na aplicação. As shells secundárias são aquelas criadas como descendentes de outra shell. Estas janelas são utilizadas geralmente como janelas de diálogo ou outras transitórias que só existem no contexto de outra janela.
Todos os widgets que não sejam shells de nível superior devem ter um ascendente. As shells de nível superior não têm ascendente, mas são criadas em associação a determinado Ecrã. Pode aceder a este ecrã com getDisplay(). Todos os outros widgets são criados como descendentes (directos ou indirectos) das shells de nível superior.
Os widgets Composite são aqueles que podem ter descendentes.
Ao ver a janela de uma aplicação, pensemos nela como árvore de widgets ou hierarquia, cuja raiz é a shell. Consoante a complexidade da aplicação, poderá haver um único descendente da shell, vários ou níveis imbricados de compósitos com descendentes.
Há propriedades de widgets que devem ser definidas na altura da criação de um widget e não podem ser alteradas depois. Por exemplo, uma lista pode ser de selecção única ou múltipla, e poderá ou não ter barras de deslocamento.
Estas propriedades, chamadas estilos, são definidas no construtor. Todos os construtores de widget comportam um argumento int que especifica o OR relativo aos bits de todos os estilos pretendidos. Em alguns casos, determinado estilo será uma sugestão, o que implica não estar disponível em todas as plataformas, mas que será ignorado naquelas onde não for suportado.
As constantes de estilo encontram-se na classe SWT na qualidade de campos estáticos públicos. A Referência de API relativa ao SWT contém uma lista de constantes aplicáveis a cada classe de widget.
As plataformas subjacentes ao SWT requerem atribuição e libertação explícitas de recursos de SO. No espírito da filosofia de concepção do SWT que traduz a estrutura de aplicações da plataforma no kit de ferramentas de widgets, o SWT necessita que se liberte explicitamente os recursos de SO que se tiver atribuído. Em SWT, o método Widget.dispose() é utilizado para libertar recursos associados a determinado objecto de kit de ferramentas.
A regra indica-nos que, se criarmos o objecto, temos de o inutilizar depois. Seguem-se regras basilares específicas que explicam esta filosofia:
Há uma excepção a estas regras. Os objectos de dados simples como, por exemplo, Rectângulo e Ponto, não usam recursos de sistema operativo. Não têm método dispose() e não é necessário libertá-los. Se tiver dúvidas, consulte o javadoc relativo a determinada classe.
Consulte Gerir recursos operativos para mais detalhes sobre este tópico.