Standard Widget Toolkit

O Standard Widget Toolkit (SWT) é um kit de ferramentas de widget para desenvolvedores Java que fornece uma API portátil e integração física com a plataforma da GUI do sistema operacional nativo subjacente.

Muitas tarefas de programação de nível baixo da UI são manipuladas em camadas mais altas da plataforma Eclipse. Por exemplo, a marcação plugin.xml para contribuições da UI especifica conteúdo de menu e barra de ferramentas, sem exigir qualquer programação de SWT. Além disso, os visualizadores e as ações de JFace fornecem implementações para as interações comuns entre aplicativos e widgets. No entanto, o conhecimento da arquitetura SWT subjacente e da filosofia do design são importantes para se compreender como o restante da plataforma funciona.

Portabilidade e integração da plataforma

Um problema comum no design do kit de ferramentas de widget é a tensão entre kits de ferramentas portáteis e a integração da plataforma. O Java AWT (Abstract Window Toolkit) fornece widgets integrados da plataforma para widgets de nível inferior como listas, textos e botões, mas não fornece acesso a componentes de nível superior da plataforma, como árvores ou rich text. Isso força os desenvolvedores de aplicativos a uma situação de um "denominador menos comum" na qual eles podem utilizar somente os widgets disponíveis em todas as plataformas.

O kit de ferramentas Swing tenta direcionar esse problema, fornecendo implementações não nativas de widgets de nível alto, como árvores, tabelas e texto. Isso fornece bastante funcionalidade, mas faz com que os aplicativos desenvolvidos em Swing continuem sendo diferentes. As camadas de emulação de aparência e comportamento da plataforma ajudam os aplicativos a parecerem-se mais com a plataforma, mas a interação com o usuário é diferente o suficiente para ser notada. Isso torna difícil utilizar kits de ferramentas emulados para construir aplicativos que competem com aplicativos shrink-wrapped, desenvolvidos especificamente para uma plataforma de sistema operacional específica.

O SWT aborda esse problema, definindo uma API portátil comum que é fornecida em todas as plataformas suportadas e implementando a API em cada plataforma, utilizando widgets negativos onde possível. Isso permite ao kit de ferramentas refletir imediatamente qualquer alteração na aparência e no comportamento da GUI do S.O. subjacente, porém mantendo um modelo de programação consistente em todas as plataformas.

O problema do "denominador menos comum" é resolvido pelo SWT de várias maneiras:

Consistência com a plataforma

A integração da plataforma não é estritamente uma forma de aparência e comportamento. A forte integração inclui a capacidade de interagir com recursos nativos do desktop, como arrastar e soltar, integrar-se a aplicativos de desktop do S.O. e utilizar componentes desenvolvidos com modelos de componentes do S.O., como ActiveX do Win32.

Apenas WindowsO suporte a ActiveX do SWT é discutido no artigo Suporte a ActiveX no SWT.

A consistência é conseguida também no próprio código, fornecendo uma implementação que pareça familiar ao desenvolvedor do sistema operacional nativo. Em vez de ocultar as diferenças do sistema operacional no código C nativo ou tentar construir camadas portáteis ou não na implementação Java, o SWT fornece implementações separadas e distintas em Java para cada plataforma.

Uma regra de implementação importante é que os nativos em C mapeiem um a um com chamadas para o S.O. Um programador de Windows irá imediatamente reconhecer a implementação do kit de ferramentas SWT no Windows, pois ele utiliza nativos que mapeiam diretamente para as chamadas do sistema utilizadas em C. Nenhuma das "mágicas da plataforma" está oculta no código C. Um desenvolvedor de plataforma pode enxergar o código e saber exatamente quais chamadas da plataforma são executadas pelo kit de ferramentas. Isso simplifica bastante a depuração. Se ocorrer uma falha durante a chamada de um método nativo, a chamada da API da plataforma com os mesmos parâmetros do código C irá exibir a mesma falha.  (Uma discussão completa deste problema pode ser localizada em Estratégia de Implementação de SWT para Nativos Java.)

Copyright IBM Corporation e outros 2000, 2003.