两者的区别我想大家都很清楚,但也很难概括清楚,
我在看书的时候,一般发现了frame添加控件的时候是直接用add的,
而JFrame添加控件时是先用getContentPane() 返回一个 Container ,然后用这个container的add的,
同时,我试过了不用getContentPane().add(##),同样也行,
所以这里我不明白为什么要先用getContentPane() 返回一个 Container然后再add. 

解决方案 »

  1.   

    LZ可以参考一下Java文档的JRootPane类和RootPaneContainer接口的说明
    默认情况下JFrame的getContentPane().add()和直接add是一样的
    都会作用在JFrame的JRootPane组件的contentPane上(轻量级容器)
    如果设置setRootPaneCheckingEnabled(false)的话,直接add将是直接作用在JFrame上(重量级容器)
    容器之间的的层次结构,在Jave文档里有描述
    至于JFrame和Frame的区别,估计也就是,前者是可以支持轻量级开发(通过设置可以转成重量级),后者则是重量级
    所谓轻重级,估计是针对系统底层管理而言
    也就是JFrame这些轻量级组件都是完全由JVM管理,即如果是Win系统的话,通过FindWindow等Window的API是取不到该组件的句柄的,也不能对该组件通过WinAPI发送消息控制,而Frame要受到底层系统的管理,即如果是Win系统的话,可以通过Window的API进行消息拦截和控制
    (以前做过一些相关项目,在Window系统拦截Java的消息,大概还有些印象,至于对不对我也不敢肯定)
      

  2.   

    JFrame是swing包内的类   
     Frame是awt包内的类
    现在基本上都是用JFrame  
      

  3.   

    qybao谢谢你了,你说得真详细啊.