一般的swing组件都是从awt组件继承的,swing是轻量组件没有本地peer跟他对应  
  而awt是重量组件,每个组件都有一个本地peer.这就是为什么swing组件在大多数系统上显示都差不多而awt就反之了。  
   
        AWT是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格。  
        Swing是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame  
  同时,由于AWT是通过操作系统实现的,所以AWT的组件只能采取各个操作系统的交集,组建数量少,功能少。而Swing则不依赖于操作系统,所以组件多,功能强。  
        Swing由纯Java写成,可移植性好,外观在不同平台上相同。所以Swing部件称为轻量级组件(轻量级组件就是指:LIGHTWEIGHT   COMPONENT,是指,Swing是由纯JAVA   CODE所写的,因此SWING解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,因此称为轻量级组件!!!)  
   
  [转载]既生   AWT,何生   Swing?作者:蔡学镛  
  在   Java   技术刚出现的初期,大家最感兴趣的   Java   API   无疑地就是   AWT。一方面因为   JDK   1.0   时只有   AWT   称得上是一组完整的   application   framework,其它   Java   API   都比较偏向个别的   class,二方面是因为当时大家受尽了   MFC   的苦,希望能有一个比较好的替代品。    
  MFC   的兴盛期已过,目前余孽尚存,我很乐见这种不良的   API   逐渐雕零。Bruce   Eckel   说得好:「MFC   是我经验过最糟糕的东西(MFC   is   the   worst   thing   that   I've   experienced)」。少说重话的   Bruce   Eckel   批评   MFC   其来有自,因为   Bruce   Eckel   是对象导向程序设计的倡导者,而   MFC   正是对象导向设计失败的绝佳范例。相较于   MFC   的不良设计,AWT   在对象导向方面就好很多了,但是因为两者都采用   ripple   形式的   event   model,所以两者在这方面很类似。在   JDK   1.1   版以后,整个   Java(包括   AWT)的   event   model   改用较好的   delegation   event   model。    
  JDK   1.2   之后,Java   有了另一组   GUI   的   API,叫做   Swing。因为   Swing   是   lightweight   的   API,所以无所不能,不但有各式各样先进的组件,而且连组件风格都可抽换。Swing   出现之后,大家很快地就不太使用   AWT   了。我发现   lightweight   组件近年来大行其道,跨   Windows/unix/Linux   平台的   Qt   也是   lightweight   组件的套件。    
  不要以为   Swing   是用来取代   AWT   的,其实   Swing   是架构在   AWT   之上做出来的(Swing   有四个   heavyweight   组件),没有   AWT,也就不会有   Swing。Swing   的出现只是减少程序员直接使用   AWT   的机会,而不会让   AWT   消失。    
  不管你选用   AWT   或   Swing   来开发你的   GUI,最好不要同时使用两者,因为:    
  AWT   或   Swing   的视觉风格差异很大,混用两者感觉不协调。    
  Swing   的组件大部分都是   lightweight,而   AWT   的组件一律是   heavyweight,两者混在一起可能会造成   Z-Order   的错乱。(请看「探究   Z-Order」一文)    
  混用   AWT   和   Swing   很可能会造成   Swing   的最佳化无用武之地,结果速度比只用   AWT   或只用   Swing   都来得慢。    
  虽然   Swing   的组件有诸多优点,但是它有一项致命的缺点   ...「慢」。许多人开发出来的   Swing   程序执行速度很慢,但是问题不见得全都出在   Swing   上面,有可能在于程序员的程序经验不足,思虑欠周所致。遇到像这样的情况,我会建议他们把程序的某些地方改写,通常效能会有明显地改进。如果这样还是不够快,那么最后一招就是把   GUI   由   Swing   改成   AWT。    
  最近   AWT   又变得稍微重要起来了。IA(信息家电)产品热潮逐渐兴起,许多   IA   产品上会有   JRE,能够执行   Java   程序,例如   WinCE、PalmOS、Symbian   EPOC   这三大   PDA   的   OS   都有   JRE。比起桌上型计算机,掌上型的   IA   不但内存有限、CPU   不够快、屏幕小且色彩少。这类   IA   上面的   Java   程序一定要用   AWT   来设计   GUI,因为这类装置的   JRE   根本不支持   Swing   这样耗费资源的庞然大物。    
  总而言之,如果你:    
  需要快速的   GUI,或者    
  需要在   IA   上开发   Java   程序    
  那么,你应该多花一点时间把   AWT   学好。否则,你应该直接去学   Swing,会比较实际些。