Java程序设计修改ch07.docx
- 文档编号:2776085
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:97
- 大小:475.67KB
Java程序设计修改ch07.docx
《Java程序设计修改ch07.docx》由会员分享,可在线阅读,更多相关《Java程序设计修改ch07.docx(97页珍藏版)》请在冰豆网上搜索。
Java程序设计修改ch07
第7章Java图形用户界面GUI
GUI全称是GraphicalUserInterface,即图形用户界面。
是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种屏幕元素。
JavaAWT(AbstractWindowToolkit)提供了图形用户界面和图形在Java兼容的操作系统中使用本地窗口系统进行显示。
Sun公司在发布Java1.2时,又结合AWT的优点,编写出完善和稳定的Swing。
Swing包含250多个类,是组件和支持类的集合。
同时提供了40多个组件。
Swing是建立在AWT基础之上的,它用来代替AWT中的重量组件,而不是用来替代AWT本身。
它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。
它使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分,同时还提供了大量有助于开发图形用户界面的附加组件。
本章将介绍利用Java的AWT包和Swing包进行图形开发的一般方法。
本章要点
●Swing包中常用组件的用法
●Java中的布局管理器
●Java的事件处理机制
本章难点
●Java的事件处理机制
学习目标
●了解Swing包中组件的基本用法,掌握如命令按扭,文本框,标签框等组件的用法
●了解布局管理器的基本使用,掌握流式布局,边界布局等常用布局的使用
●了解事件处理的基本方法,掌握动作事件,鼠标事件,键盘事件等常用事件的处理方法
7.1抽象窗口工具包(AWT)与javax.swing包概述
7.1.1java.awt包的子包
AWT是JavaAPI的一部分,它为开发图形用户界面提供了实现各种组件、布局管理器和事件处理器的类和接口。
用户在导入了AWT中的包或类后,通过创建组件、布局管理器和事件处理器的对象,就可以设计出所需要的各种形式的图形用户界面。
AWT由下列包所组成,如表7-1所示。
表7-1AWT包
java.awt
包含用于创建用户界面和绘制图形图像的所有类
java.awt.color
提供用于颜色空间的类
java.awt.datatransfer
提供在应用程序之间和在应用程序内部传输数据的接口和类
java.awt.dnd
Drag和Drop是一种直接操作操作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与GUI中显示元素逻辑相关的实体之间传输信息
java.awt.event
提供处理由AWT组件所激发的各类事件的接口和类
java.awt.font
提供与字体相关的类和接口
java.awt.geom
提供用于在与二维几何形状相关的对象上定义和执行操作的Java2D类
java.awt.im
提供输入方法框架所需的类和接口
java.awt.im.spi
提供启用可以与Java运行时环境一起使用的输入方法开发的接口
java.awt.image
提供创建和修改图像的各种类
java.awt.image.renderable
提供用于生成与呈现无关的图像的类和接口
java.awt.print
为通用的打印API提供类和接口
7.1.2javax.swing包
Swing是第二代GUI开发工具集,是构筑在AWT上层的一组GUI组件的集合,为保证可移植性,它完全用Java语言编写,与AWT相比,Swing提供了更完整的组件,引入了许多新的特性和能力。
Swing提供更多的组件库,如:
JButton,JLabel等。
这些增强的组件在Swing中的名称通常都是在AWT组件名前增加了一个“J”字母,如AWT中的Button在Swing中是JButton。
大部分的Swing组件是用Java码直接在画布(canvas)上画出来的。
Swing组件较不依赖目标平台,且使用较少的NativeGUI资源,被称之为轻量级组件,而AWT组件就被称为重量级组件。
当Swing组件和AWT组件重叠在一起时,AWT组件会盖在Swing组件上,若把这两种组件混合着用,结果可能会产生一些bug。
图7-1给出了AWT与Swing的关系图,图7-2列出了Swing组件继承关系图,从图中可看出,Swing的组件都继承Container,也就是说Swing的组件都可当作容器来装其他的组件,而AWT的组件就只是组件而已,上面不能放其他的东西。
图7-1AWT与Swing关系图
图7-2Swing组件继承关系图
从关系图可看见一个重要的事实:
Swing的组件都继承Container,也就是说Swing的组件都可当作容器来装其他的组件,而AWT的组件就只是组件而已,上面不能放其他的东西。
以Button为例,AWT的Button只有两种构造函数:
Button()
Button(Stringlabel)
也就是说Button上面只能放字符串,而JButton就有5种形式,不仅可以放文字,还可以放图片。
JButton()
JButton(Actiona)
JButton(Iconicon)
JButton(Stringtext)
JButton(Stringtext,Iconicon)
AWT组件会耗掉较多的资源,且在跨平台上会有些问题,所以在实际应用中,Swing中的组件用的更多一些,本书也主要以介绍Swing中的组件为主。
7.2常用Swing组件及AWT组件
7.2.1Component(组件)类
java.lang.Object
java.awt.Component
Component类是AWT包中的一个抽象类,通过继承它,可以得到各种功能的组件,Java中的图形组件大多都是Component类的子类。
图形组件能够在屏幕上显示一定的图形,用户可通过这些组件与程序进行信息交互,方便、快捷地设计出可视化的图形用户界面。
JComponet类继承于Component类,我们常用的Swing组件,如JLabel,JButton等都是JComponet类的子类。
由于Component类是所有图形组件类的父类,它包含许多图形组件类共有的成员变量和方法。
1.常用成员变量
LEFT_ALIGNMENT左边对齐方式
RIGHT_ALIGNMENT右边对齐方式
2.构造方法
Component()构造方法
3.常用方法
voidadd(Componentcomp)在容器的末尾添加组件comp
注意:
该方法的参数comp的类为Component,而Component类是所有组件类的父类,即该方法被所有Component类的子类继承。
因此,该方法可用于在任何组件类对象中添加任何组件类对象。
voidsetBackground(Colorcolor)设置背影颜色
voidsetBounds(intx,inty,intw,inth)设置所占矩形的位置和尺寸
voidsetFont(Font)设置字体
voidsetForeground(Colorc)设置前景颜色
voidsetVisible(booleanb)设置组件是否可见。
True可见,false不可见
voidsetLocation(intx,inty)移动组件到左上角位置为(x,y)
voidsetSize(intw,inth)重设组件的大小,其w为宽,h为高
注意:
上述方法定义在Component类中,而Component类是所有组件类的父类,因此这些方法被所有Component类的子类继承。
Component类还定义了许多绘图方法,Component类的绘图方法将在7.4节中介绍。
7.2.2Container(容器类)
java.lang.Object
java.awt.Component
java.awt.Container
Container类是AWT包中的类,主要用来放置其他组件,所以称作“容器”。
由于Container类继承自Component类,所以它既拥有Component类的所有功能,同时,它还具有“容器”的一些特征。
1.构造方法
Container()构造方法
2.常用方法
voidremove(Componentcomp)删除容器中的组件
voidsetLayout(LayoutManagermgr)设置容器的布局管理器为mgr
从图7-1中可以看见,AWT包中容器类的派生子类有:
框架(Frame)、面板(Panel)、窗口(Window)、对话框、(Dialog)等。
7.2.3Swing容器及组件
Swing组件分为顶层容器,中间层容器和基本组件三种类型。
顶层容器有四个,分别是JWindow,JFrame,JDialog,JApplet,这四个顶层容器都是属于重量级组件(Swing中只有这四个是属重量级组件)。
顶层容器的重要性在于:
每一个GUI组件都需被包含在一个顶层容器的包容层级中。
顶层容器可以放入menubar,并且含有一个默认的contentPane可供GUI组件放入其中。
在Swing中有一个特别的类JComponent,作为所有Swing组件的顶层抽象类,里面定义了许多Swing组件共同的特性。
JComponent继承自java.awt.Container。
所以每一个继承自JComponent的Swing组件也都是一种容器。
中间层容器介于顶层容器与一般Swing组件间,是被专门设计来盛装别的组件用的,可以让被承载的组件能合适地,有组织地呈现出来。
常用的中间层容器有JMenuBar,JOptionPane,JPanel等。
有些容器并非一层,而由几层嵌板组成,常用的嵌板有:
拆分嵌板(JSplitPane),内容嵌板,页签式嵌板(TabbedPane)等。
拆分嵌板:
按指定的方向和方式拆分其内的两个子组件,一个拆分嵌板只能拆分两个子组件。
内容嵌板:
JFrame,Jwindow,JDialog是有多层嵌板的容器,如果要在这些容器上面放置组件,必须放置在他们的内容嵌板(pane)上。
通过函数getContentPane()可得到当前容器的内容嵌板。
页签式嵌板:
这个嵌板如同卡片,提供文件夹式的页签,当前只显示一页,如要进入下一页,只要点击上面的页签。
有些如JPanel是可以直接放置组件的容器,所以不需要使用嵌板。
如果要按自己的想法排列放在容器上的组件,我们必须使用到布局管理器(Layout)来进行管理。
布局管理器将在下节中介绍。
1.JFrame(窗体)类
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
窗体是一个带有边框、标题栏和菜单的图形容器。
是图形开发中不可缺少的容器之一。
JFrame继承了AWT中的Frame类。
但是,和Frame类不同,我们不能直接在JFrame上增加子部件和设置布局管理器,而且必须先调用JFrame.getContentPane()方法,通过该方法返回JFrame中自带的JRootPane对象,JRootPane是JFrame惟一的子组件,我们只能在这个JRootPane对象上增加子组件和设置布局管理器。
一般我们是先将组件先添加在JPanel上,然后再将JPanel添加到JFrame上。
JFrame类在响应用户关闭窗体时,默认的简单方式是隐藏这个窗体,并没有真正关闭这个窗体。
我们可以在windowClosing事件处理方法中,调用这个窗口对象的d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 修改 ch07