AWT działa tak, że każdy "widżet" w okienku stworzonym przez AWT, czyli np. guziczek, czy pole tekstowe jest tak naprawdę natywnym elementem interfejsu danego systemu. Gdy Java stworzy guziczek AWT to narysuje go system operacyjny, później gdy użytkownik naciśnie guziczek to zostanie to obsłużone przez system operacyjny, który wykona odpowiedniej animacji, np. przerysuje guziczek jako wciśnięty i w końcu wyśle informację o zdarzeniu do kodu w Java'ie. Wadą tego rozwiązania jest po pierwsze to, że trzeba było wybrać pewien skończony zakres "widżetów", który był częścią wspólną wszystkich systemów gdzie miała działać Java, przez to AWT nie ma pewnych przydatnych elementów, komplikuje to też programowanie bo nie zawsze wszystko musi działać tak samo na każdym systemie, wadą jest też to, że mamy tutaj dużo miejsc gdzie konieczna jest komunikacja między systemem operacyjnym, a Java'ą. Aplikacje działające w oparciu o AWT skończyły się tak koło Java'y 1.1-1.2.
Swing działa inaczej, tworzy 1 okienko AWT i rysuje w nim swoje własne guziczki, pola tekstowe i co mu tam się jeszcze spodoba. Wtedy gdy użytkownik przyciśnie taki guziczek to system operacyjny poinformuje Java'ę, że użytkownik użył przycisku myszy w tym i tym miejscu ekranu, a Java interpretuje to jako wciśnięcie guziczka Swingowego, przerysowuje go, wywołuje odpowiedni kod i tak dalej. Dzięki temu, że wszystko jest rysowane przez Java'ę to na każdym systemie Swing może dostarczyć identycznych "widżetów", które będą wyglądały tak samo i tak samo się zachowywały, dodatkowo możliwe jest też nadawanie własnego wyglądu wszystkim elementom interfejsu. Teoretycznie powinno to też być szybsze, bo Java musi się rzadziej komunikować z systemem operacyjnym. Rzeczywistość pokazuje, że nie zawsze jest tak różowo ;-)
Jest jeszcze trzecia droga ;-) czyli SWT, które łączy idee z AWT [czyli jak najbardziej natywną obsługę UI] i Swingowe rysowanie. SWT jest przez to dość szybkie przy jednoczesnym dostarczeniu dość dużej ilości komponentów. Wadą SWT jest to, że nie jest standardowym elementem Java'y i trzeba ze swoim kodem dystrybuować też kod SWT, a tu mogą być kłopoty bo gdy chcesz by Twoja aplikacja była zdolna do pracy w różnych systemach operacyjnych to musisz dystrybuować także elementy natywne.
Ze słynniejszych aplikacji w SWT można podać przykład Eclipse'a, którego powstanie jest silnie związane ze stworzeniem samego SWT.