Olha, posso tentar passar uma noção básica; talvez alguém extenda isso para algo mais concreto.
Antes do Java 2, os desenvolvedores da Sun queixavam-se “write once, debug in everywhere” (escreva uma vez, depure em todo lugar) satirizando o slogam “write once, run everywhere” (escreva uma vez, rode em todo lugar).
Com o Java 2 e as extensões Swing, a sun aproximou o seu slogam da realidade.
O problema com o AWT original é que, como o Java utilizava-se do conjunto de widgets (window gagets - elementos de janela) do sistema operacional subjacente, ele ficava limitado a um mínimo denominador. Por que? Porque, evidentemente, o Windows, por exemplo, tem um conjunto de widgets bem mais rico que o Motif, por exemplo. Isso era um problema realmente.
Com o Java 2, o modelo Swing implementa uma arquitetura que independe dos widgets do sistema operacional subjacente. Isso significa que ele solicita ao sistema operacional apenas o “canvas” e, ele próprio (as basic UIs, na verdade), desenham nesse canvas.
Espero ter ajudado.
Abraços.