Vimos que a área de trabalho define pontos de extensão para que os plug-ins contribuam com funções de UI para a plataforma. Muitos destes pontos de extensão, especialmente extensões de assistente, são implementados via classes nos pacotes org.eclipse.jface.*. Qual é a diferença?
JFace é um kit de ferramentas da UI que proporciona classes ajudantes para desenvolver funções de UI que podem ser morosas de implementar. JFace funciona acima do nível de um sistema de widgets em bruto. Inclui classes para lidar com tarefas de programação comuns de UI:
O JFace liberta-nos para nos concentrar-nos na implementação da função do nosso plug-in específico, em vez de nos debruçar-nos no sistema de widgets subjacente ou de resolver-nos problemas comuns a qualquer aplicação de UI.
Onde acaba o JFace e começa a área de trabalho? Por vezes a fronteira não é evidente. Regra geral, as APIs de JFace (oriundas dos pacotes org.eclipse.jface.*) são independentes de pontos de extensão e APIs de área de trabalho. É concebível compor um programa JFace sem utilizar código de área de trabalho algum.
A área de trabalho utiliza o JFace mas tenta reduzir as dependências sempre que possível. Por exemplo, o modelo de partes de área de trabalho (IWorkbenchPart) está concebido para ser independente do JFace. Vimos anteriormente que vistas e editores podem ser implementados com widgets de SWT directamente sem utilizar classes JFace. A área de trabalho tenta permanecer "neutra em relação ao JFace" sempre que possível, o que permite aos programadores utilizarem as partes do JFace que considerarem úteis. Na prática, a área de trabalho utiliza o JFace para muita da sua implementação e há referências a tipos JFace em definições de API. (Por exemplo, as interfaces JFace para IMenuManager, IToolBarManager e IStatusLineManager aparecem como tipos nos métodos da área de trabalho IActionBar.)
Ao utilizar a API JFace, é boa ideia ter em mente as regras de compromisso para utilizar módulos de segundo plano. Consulte A área de trabalho e os módulos para mais informações.
A fronteira entre SWT e JFace é muito mais nítida. O SWT não depende de código de JFace ou plataforma algum. Muitos dos exemplos de SWT mostram como construir uma aplicação autónoma.
O JFace está concebido para facultar funcionalidades de UI para aplicações comuns em cima da biblioteca de SWT. O JFace não tenta "ocultar" o SWT nem substituir as suas funcionalidades. Em contrapartida, proporciona classes e interfaces que tratam muitas das tarefas comuns associadas à programação de uma UI dinâmica em SWT.
A relação entre JFace e SWT é demonstrada com mais clareza na abordagem a visualizadores e sua relação com widgets de SWT.