初学Java的时候一直弄不清Frame和Panel的区别,都是在上面装组件,也没看出什
么所以然,一直稀里糊涂地用。最近看来一下Java类库中几个主要类的源文件,才明白
了一点所以然。写下了此文,希望能给大家一点帮助。

让我们先看一看原始文件中的定义:

[Frame]
A Frame is a top-level window with a title and a border.
<详见java.awt.Frame>

[Panel]
Panel is the simplest container class. A panel provides space in which an ap
plication can attach any other component, including other panels.
<详见java.awt.Panel>

<注意:以下大写指类,小写泛指对象,比如Frame指Frame类,frame泛指Frame对象。>

好象是看出区别了:Frame是Window的子类,一个Frame对象就是一个有标题有边界
的顶层窗口。Panel是最简单的容器类,是Container的子类。一个Panel对象就是要给应
用程序提供空间,用来添加组件,包括其它的Panel对象。

追本溯源,其实Frame和Panel还是有些亲戚关系的:Frame是Window的直接子类,W
indow又是Container的直接子类,而Panel是Container的直接子类,它们都是从Contai
ner里扩展出来的,是叔侄关系。它们的老祖宗是Component(Container是Component的
子类),Component是基类,回溯本源到此为止,已经是根了。

Frame和Panel都是容器类,那么它们在使用上有什么区别呢?

你可以创建一个panel对象,在上面添加组件,比如单独建立一个TestPanel.java
的源文件(TestPanel extends Panel)。但是因为Panel不是顶层容器,所以你不能直
接显示你创建的这个panel对象,必须装在顶层容器里比如嵌入一个frame里,才能显示
。(为什么Frame对象可以直接显示,而Panel对象不能,文章最后有解释。)
Frame是顶层容器,一般不单独使用(注意只是一般,还是可以直接嵌入组件的),而是
习惯在frame里嵌入panel,再在panel上面添加组件。你在用Jbuilder创建一个Applica
tion(比如TestApp和TestAppFrame)的时候,在你的框架文件TestAppFrame里就会自动
生成一个叫contentPane的JPanel对象。

Panel是一般容器,可以自身嵌套(比如在panel1里嵌入panel2);但Frame已经是
顶层容器了,自身不能嵌套。

我们用得最多的JFrame和JPanel,就是Frame和Panel在Swing下的扩展(JFrame是Fr
ame子类和JPanel是Panel的子类)。

我们用Jbuilder创建Application时会自动生成一些代码,其中的frame.pack()一句
是什么意思?<注:frame是一个已生成的框架类对象>

我们在java.awt.Frame的源文件里找不到pack()方法的定义。看了java.awt.Window
才知
道,原来在Window类里定义了pack()和show()两个显示窗口的方法,被Frame继承了过来
。这可能也是panel无法单独使用的一个原因吧,Panel和它的直接超类Container里,都
没有定义类似pack()和show()的显示容器的方法。
原文地址:http://www.javaxxz.com/simple/?t3346.html

Java --Frame和Panel的区别相关推荐

  1. java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】

    初学Java的时候一直弄不清Frame和Panel的区别,都是在上面装组件,也没看出什 么所以然,一直稀里糊涂地用.最近看来一下Java类库中几个主要类的源文件,才明白 了一点所以然.写下了此文,希望 ...

  2. Frame与Panel

    Frame是框架窗体,有边框的:Panel是面板,无边框.一般把几个Panel加到一个Frame上. Sun公司的定义:Frame是带标题和边框的最顶层窗体:Panel是个最简单的容器类,它提供空间让 ...

  3. java gui容器_[Java教程]GUI Panel 容器以及布局管理器

    [Java教程]GUI Panel 容器以及布局管理器 0 2016-11-09 07:04:32 一.Panel是AWT中的另一个典型的容器,它代表不能独立存在.必须放在其他容器中使用. 1.可作为 ...

  4. Frame 与JFrame 的区别

    Frame和JFrame的区别: 1.JFrame是Frame的子类,JFrame在javax.swing包内,Frame在包java.awt中 2.关闭窗口的方式不同: Frame: Frame加监 ...

  5. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  6. Java NIO与IO的区别和比较

    Java NIO与IO的区别和比较 导读 J2SE1.4以上版本中发布了全新的I/O类库.本文将通过一些实例来简单介绍NIO库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道. 一. 介绍NIO ...

  7. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  8. JAVA CLASSPATH 和PATH的区别 经典

    JAVA CLASSPATH 和PATH的区别 收藏 PATH: 用来指定 java 虚拟机(JVM) 所在在目录,也就是我们最常用的用来编译java源程序的javac.exe 和用来执行 *.cla ...

  9. java 接口与抽象类的区别

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

最新文章

  1. EasyPHP-2.0b1+ Mantis-1.1.0安装及技巧
  2. Android学习----自适应国际化语言
  3. php 之mysqli简单封装
  4. win10环境变量设置_win10配置anaconda环境变量
  5. 2015年10月15日学习html基础笔记
  6. leetcode 1178. Number of Valid Words for Each Puzzle | 1178. 猜字谜(bitmask位运算)
  7. 基于SPI协议的Flash全擦除
  8. jqueryui的Tooltip使用方法
  9. php 前置匹配,浅析PHP正则表达式匹配的特定实现
  10. Exponentially Weighted Moving-Average
  11. 关于ie浏览器的问题
  12. selenium IDE下载及使用
  13. 安卓设备手柄无法映射线性扳机的解决思路(1)
  14. python day 105
  15. greensock是个很不错的类库,故转载了一些关于其中类使用方法的文章。
  16. 学生管理系统IPO图_C语言学生信息管理系统演示和说明(文件版)
  17. 弘辽科技:如何快速提高淘宝店铺的综合评分
  18. eclipse、myeclipse使用常用的小技巧(eclipse alt+/ 自动补全 )
  19. 第9章 数据库完整性
  20. CityMaker7 开发常见异常记录

热门文章

  1. Linux:命令行光标移动和删除整行
  2. [转载]研究型论文写作的八股文——献给我的学生们
  3. 医院弱电工程辨别光缆八步骤
  4. php 计算一年多少周,每周的起止日期
  5. 常用开发、办公工具推荐
  6. 计算机管理培训考试试题,计算机技能培训试题一
  7. Java调用百度API出现{status:211,message:APP SN校验失败}
  8. IMU残差函数及雅可比公式推导(二)
  9. 计算机电学原理,什么是与门电路及与非门电路原理?
  10. adreno源码系列(九)全局内存申请