Jonas,
O Swing generaliza sua arquitetura subjacente para fornecer uma experiência de usuário neutra à plataforma. O único componente pesado (fornecido pelo sistema operacional) é o contêiner JFrame e o restante é praticamente manipulado pelo Swingit. O AWT, por outro lado, pede ao sistema operacional para desenhar todos os seus componentes da interface do usuário, o que significa que é mais rápido de várias maneiras, pois você usa os componentes da interface do usuário nativos específicos para o sistema operacional. O SWT tenta alcançar um meio termo, para vários componentes padrão, como botões e etiquetas (que estão disponíveis na maioria dos sistemas operacionais), permite que o sistema operacional lide com eles e para outros componentes especializados, o SWT cuidará da criação para você.
Dito isto, posso descrever os inconvenientes.
(1) Como o kit de ferramentas cria e renderiza os componentes para você, em vez de solicitar ao sistema operacional, você não aproveita a velocidade dos componentes internos fornecidos pelo sistema operacional.
(2) A interface do usuário não é particularmente atrativa, pois parece estranha para a maioria das plataformas de sistema operacional em relação à aparência e ao uso que você usa.
(3) Alguns dos gerenciadores de layout, como GridBadLayout etc., poderiam ser mais simplificados. Eu perdi a conta do número de projetos em que trabalhei onde as pessoas envolveram o GridBagLayout em algum código personalizado para obter uma maneira mais simples de usá-lo.
Eu recomendo que você escreva um aplicativo simples no AWT, Swing e SWT e compare as abordagens de desenvolvimento e o produto final entre todos eles, depois revise os vários comentários feitos por outros desenvolvedores e decida qual deles funciona melhor. Eu trabalho com o Swing há muitos anos e costumava não gostar do SWT, mas percebi que o Swing é muito mais complicado do que precisa quando comparado a outras estruturas existentes.