Well, this is a hard question. Do not mistake me, neither of them is better than the other. I have been using SWING for more than three years, and SWING is perfectly designed to embrace the concept of MVC (Model-View-Control). I love it.
In Java paradigm, SWING is considered a RI (reference implementation) for Java graphical specification. Yes, I believe most people will equal SWING and Java GUI library, but, that is not totally true. SWT is another implementation from IBM. I will try to touch a bit on the difference.
Java boasts its cross-platform capability of "write once, compile once, and run everywhere". The secret and cost is a virtual machine(VM) residing on every single OS species to run these compiled byte codes. SWING is part of the standard library implementation. The virtual machine will try to render every object you intended and coded on its own effort (without the help of OS). Well, this ensures the same graphics appears on different OSes (if you code wisely), but it hurts the runtime performance. This is even more sketchy in early versions of Sun JDK release. IBM has tried to tackle this problem from a fundamentally 'un-java' approach. SWT leverages the strength of MS Windows API, and let the windows draw whenever possible, and let Java draw whenelse. There are significant improvement in speed, but it becomes partially 'native'. While, you may already realized, is it still Java? emmm, that is a good question. But the fact is, SWT implementation is not bad, and it has quite a lot of users.
to be continued...