Widgets personalizados

Poderá optar por estender o SWT implementando os seus próprios widgets personalizados. O próprio SWT faculta um pacote, org.eclipse.swt.custom, que contém controlos personalizados que não se encontram no conjunto núcleo dos controlos de SWT mas que são necessários para implementar a área de trabalho da plataforma.

Controlo
Finalidade
CBanner CBanner é utilizado na área de trabalho para esquematizar a área da barra de ferramentas e da barra de ferramentas de mudança de perspectivas.
CCombo Semelhante ao Combo, mas redimensionável verticalmente, o que permite ajustá-lo a células de tabela.
CLabel Semelhante à Etiqueta, mas suporta encurtamento de texto mediante reticências. Suporta ainda um efeito gradient para a cor de segundo plano, tal como é visível na vista da área de trabalho activa. Não suporta translineação.
CTabFolder Semelhante a TabFolder, mas suporta configuração adicional da aparência visual dos separadores (superior ou inferior) e esquemas.
CTabItem Objecto de interface de utilizador seleccionável que corresponde a um separador de uma página numa CTabFolder.
SashForm Controlo compósito que esquematiza os seus descendentes numa disposição de linhas ou colunas e utiliza uma Faixa para as separar para que o utilizador as possa redimensionar.
ScrolledComposite Controlo compósito que desloca o seu conteúdo e o estica opcionalmente para preencher o espaço disponível.
StyledText Controlo editável que permite ao utilizador introduzir texto. Os intervalos de texto dentro do controlo podem ter cores e estilos de tipo de letra distintos.
ViewForm ViewForm utiliza-se na área de trabalho para posicionar e dimensionar uma barra local de menus/ferramentas/etiquetas.

Implementar um widget personalizado

Uma vez determinado que é preciso um widget personalizado e decididas as plataformas que devem ser suportadas, poderá considerar várias técnicas de implementação para o seu widget. Estas técnicas podem ser misturadas e correspondidas consoante o que estiver disponível na plataforma do SO subjacente.

Implementação nativa

Se a aplicação quiser um widget nativo que não seja facultado pelo SWT, terá de o implementar nativamente. Poderá ser um widget de plataforma, widget de outros fabricantes ou qualquer outro widget numa biblioteca partilhada de plataforma. Encontra-se um exemplo completo da implementação do widget personalizado nativo em Criar Widgets Próprios com SWT.

Combinar widgets existentes

Os widgets podem ser combinados para formar widgets que sejam mais sofisticados. Por exemplo, pode implementar-se um Combo com um widget de entrada de texto junto com um botão e uma lista pendente. Para implementar um widget combinado, deve criar uma subclasse de Composite e gerir os descendentes internamente.

Encontra-se um simples exemplo em CCombo.

Implementação desenhada personalizada

Em alguns casos, não existe código nativo nem widgets que ajudem na implementação do novo widget. Significa isto que é necessário desenhar o widget na rotina de tratamento do evento Pintura. Embora esta técnica se possa tornar complicada, tem a vantagem de produzir uma implementação completamente portátil.

Os controlos desenhados personalizados são implementados construindo subclasses de Tela ou Compósito. Constitua subclasse de Tela se o widget não contiver nenhuns controlos descendentes.

A implementação interna de um widget desenhado personalizado geralmente implica estas principais tarefas:

Muitos dos widgets implementados em org.eclipse.swt.custom utilizam esta abordagem. Encontra-se um exemplo simples em CLabel.

Encontram-se mais informações sobre widgets personalizados em Criar widgets próprios com SWT.