AWT components are heavyweight because they map directly to the host platform's peer widgets, making AWT platform-dependent. Swing components are lightweight because they are written entirely in Java and drawn independently of platform-specific peers, making them platform-independent.