两者的区别我想大家都很清楚,但也很难概括清楚,
我在看书的时候,一般发现了frame添加控件的时候是直接用add的,
而JFrame添加控件时是先用getContentPane() 返回一个 Container ,然后用这个container的add的,
同时,我试过了不用getContentPane().add(##),同样也行,
所以这里我不明白为什么要先用getContentPane() 返回一个 Container然后再add.
我在看书的时候,一般发现了frame添加控件的时候是直接用add的,
而JFrame添加控件时是先用getContentPane() 返回一个 Container ,然后用这个container的add的,
同时,我试过了不用getContentPane().add(##),同样也行,
所以这里我不明白为什么要先用getContentPane() 返回一个 Container然后再add.
默认情况下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的消息,大概还有些印象,至于对不对我也不敢肯定)
Frame是awt包内的类
现在基本上都是用JFrame