




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 主编 贾振华 2010年1月 JAVA 编 程 技 术图形用户界面(GUI)设计第8章java.awt 包 抽象窗口工具集AWT(Abstract Window Toolkit),Java 最早的用于编写图形节目应用程序的开发包,Java进行GUI设计的基础。javax.swing 包 Swing组件存放在javax.swing包中。几乎所有AWT组件对应有新功能更强的Swing组件。所以说Swing是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础,另外还加入了一些全新的组件。Swing组件在名称上前面多了一个字母“J” 。 JAVA GUI 包 和 简 单 GUI 程 序A
2、WT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的一次编译,到处运行的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交
3、集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。 JAVA AWT 的 理 解Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。例如说并不是所有的操作系统都提供了对树形控件的支持, Swing 利用了AWT 中所提供的基本作图方法对树形控件进行模拟。由于 Swing 控件是用100%的Java代码来实现的,因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。 JAV
4、A Swing 的 理 解AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C+程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。 JAVA AWT 和 Swing 的 区 别 JAV
5、A AWT 和 Swing 的 关 系MVC即:Model(模型)、View(视图)和Controller(控制)。这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。 1)最上面的一层,是直接面向最终用户的视图层(View)。它是提供给用户的操作界面,是程序的外壳。 2)最底下的一层,是核心的数据层(Model),也就是程序需要操作的数据或信息。 3)中间的一层,就是控制层(Controller),它负责根据用户从视图层输入的指令,选取数据层中的数据,然后对其进行相应的操作,产生最终结果。这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口
6、(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。 JAVA 浅 谈 MVC 模 式用Windows的计算器小程序为例,解释一下MVC模式。在这个计算器程序中,外部的那些按钮和最上面的显示条,就是视图层,那些需要运算的数字就是数据层,执行加减乘除的那些内部运算步骤就是控制层。每一层执行不同的功能,整个程序的结构非常清楚。我们扩大一点想象会发现,很多程序本质上都是这种模式:对外提供一组触发器( Windows的计算器中是按钮),执行一些内部操作,最后返回结果。因此,MVC模式的应用是非常广泛的。 JAVA 浅 谈
7、MVC 模 式java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念: 组件 - Component 容器 - Container 布局管理器 - LayoutManager JAVA GUI 设 计 工 具 JAVA 图 形 化 设 计 步 骤第一步:创建顶层容器对应于程序的初始显现窗口,窗口中放入其它菜单、工具栏、文本框、按钮等组件顶层容器图形化界面显示的基础,其它所有的组件(控件)都是直接或间接显示在顶层容器中的。在java中顶层容器有三种,分别是JFrame(框架窗口,即通常的窗口)、JDialog(对话框)、JApplet(用于设计嵌入在网页中的java小程
8、序)。顶层容器是容纳其它组件的基础,即设计图形化程序必须要有顶层容器。 JAVA 图 形 化 设 计 步 骤 JAVA JFrame 框 架 窗 口 的 使 用 JAVA JFrame 框 架 窗 口 的 使 用 JAVA JFrame 框 架 窗 口 的 使 用第二步:创建中间容器、组件对应于程序中出现的菜单、工具栏(中间容器)、文本框、按钮、单选框、复选框等控件。有很多Swing组件可以使用,见后面的Swing UI组件表。 JAVA 图 形 化 设 计 步 骤Java中间容器是可以包含其它相应组件的容器,但是中间容器和组件一样,不能单独存在,必须依附于顶层容器。常见的中间容器有:JPan
9、el:最灵活、最常用的中间容器。JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件。 JAVA 图 形 化 设 计 步 骤第三步:将组件加入容器在java中创建组件后,还需要将组件放入相应的容器,才能在顶层容器,如窗口中显示出组件。第四步:设置容器内组件的位置组件添加到容器中,还必须设置好组件的显示位置,一般有两种方法来设置组建的显示位置,一是按照与容器的相对距离(以像素为单位),精确固定控件的位置;二是用布局管理器来管理组件在
10、容器内的位置。 JAVA 图 形 化 设 计 步 骤第五步:处理组件所产生的事件即用户执行选择菜单、单击按钮等操作时,就要执行相应的命令,进行相关的程序处理,这就需要设置组件的事件。 JAVA 图 形 化 设 计 步 骤 JAVA AWT 类 的 层 次 结 构在AWT类层次结构的顶部是Component类。Component类是一个封装了一个可视组件的 所有属性的抽象类。在屏幕上显示的所有用于用户交互的用户界面元素都是Component类 的子类。这个类定义了一百多个用于事件管理的公共方法,这些事件包括鼠标或键盘的输 入,窗口位置或大小的改变以及重绘窗口。一个Component对象可以保存当
11、前的前景色、背景色以及被选 择的文本的字体。 JAVA 组 件(Component)Container类是Component类的子类。这个类有一些附加方法,允许别的Component对象 嵌套在Container类的对象中。当然,其他的Container对象可以被存放在一个Container对象中(因为它们也是Component类的实例)。这就形成了一个多层包容机制。容器主要负责 布置它所包含的组件的位置。而它是通过使用一些设计管理器来完成这个功能的。 JAVA 容 器(Container)Panel类是Container类的一个具体的子类。它没有添加任何新的方法;它只是简单的实现了Conta
12、iner类。一个Panel对象可以被看作是一个递归嵌套的具体的屏幕组件。Panel类是Applet类的父类。当屏幕输出直接传递给一个小应用程序时,它将在一个Panel对象的表面被画出。实际上,一个Panel对象是一个不包含标题栏、菜单栏以及边框的窗口。这就是为什么在浏览器中运行一个小应用程序时,你看不见标题栏、菜单栏以及边框的原因。而当你用小应用程序查看器来运行一个小应用程序时,小应用程序查看器提供了标题和边框。 JAVA 面 板(Panel)其它的组件可以通过调用Panel类的add()方法被加入到一个Panel对象中,这个方法是从Container类继承来的。一旦这些组件被加入,那么通常就
13、可以通过调用在Component类中定义了的setLocation(),setSize()以及setBounds()方法来改变组件的位置和大小。 JAVA 面 板(Panel)窗口类产生一个顶级窗口(Window)。顶级窗口不包含在任何别的对象中,它直接出现在桌面上。通常,不会直接产生Window对象。相反,我们常常使用Window类的子类,这就是Frame类。 JAVA 窗 口(Window)Frame类封装了窗口通常所需要的一切组件,拥有标题栏、菜单栏、边框等等。我们经常利用Frame类在应用程序中创建顶级或子窗口,在小应用程序之中创建子窗口。如果你在一个小应用程序中创建了一个Frame对
14、象,它将包含一个例如“JavaAppletWindow”的警告消息给用户,表示一个小应用程序窗口已经被创建。这个消息警告用户,所看见的窗口是由小应用程序启动的,而不是被运行在他们机器上的软件所启动。 JAVA 框 架(Frame)虽然画布不是小应用程序和frame窗口的层次结构的一部分,但是Canvas这种类型的窗口是很有用的。Canvas类封装了一个你可以用来绘制的空白窗口。 JAVA 画 布(Canvas)简单地说,通过创建一个frame类的实例来就能创建一个窗口,但是可能很少会这样做,因为对于这样的窗口没有什么可以做的。例如,不能接受和处理在这个窗口中发生的事件或者不能简单的输出信息给它
15、。大多数情况我们是创建一个frame类的子类。在小应用程序中创建一个新的基于frame的窗口是很容易的。首先,创建一个frame类的子类。接下来,重载任何一个标准窗口方法,比如init()方法,start()方法,stop()方法和paint()方法。最后,实现windowListener监听器接口的windowClosing()方法,在这个方法中,当窗口被关闭时,调用setVisible(false)方法将窗口从屏幕中除去。 JAVA 创 建 窗 口Swing体系结构最初Smalltalk系统的UI工具使用所谓的模型视图控制(MVC)模式,MVC引入这样一个概念:数据源应该同屏幕展现分开。这
16、是一个优秀的体系设计结构,能促进代码重用和程序框架。Swing使用的是一个变体的MVC架构。典型的Swing GUI组件包括至少三个对象:一个Component,一个Model和一个UI Delegate,在这个框架中,Model负责存储数据,UI Delegate负责从Model获取数据并渲染到屏幕上去,Component通常协调Model和Delegate之间的操作,并同时负责将 Swing嵌入到AWT窗口系统中。注意,UI Delegate对象可以在运行的时候动态替换,这就使Swing具备了可插拔的外观(Pluggable Look-And-Feel, PLAF)。 JAVA Swing
17、 体 系 结 构Swing提供4个顶层容器JFrame, JDialog, JApplet,JWindow,如果是桌面应用,则GUI必须要有一个JFrame,如果是浏览器应用,则GUI必须要有一个JApplet。其他Swing组件,或自定义开发的Swing组件都扩展自 ponent,并且其实例要存在于顶层容器的层次树中。 JAVA Swing 开 发 GUI 的 基 本 约 定 JAVA ponent(组件层次图)与AWT组件不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(content pane)上。内容面板是顶层容器包含的一个普通容器,它
18、是一个轻量级组件。基本规则如下: (1)把Swing组件放入一个顶层Swing容器的内容面板上 (2)避免使用非Swing的重量级组件。 JAVA 使 用 Swing 的 基 本 规 则 根面板由一个玻璃面板(glassPane)、一个内容面板(contentPane)和一个可选择的菜单条(JMenuBar)组成,而内容面板和可选择的菜单条放在同一分层。玻璃面板是完全透明的,缺省值为不可见,为接收鼠标事件和在所有组件上绘图提供方便。根面板提供的方法: Container getContentPane(); /获得内容面板 setContentPane(Container); /设置内容面 JM
19、enuBar getMenuBar( ); /活动菜单条 setMenuBar(JMenuBar); /设置菜单条 JLayeredPane getLayeredPane(); /获得分层面板 setLayeredPane(JLayeredPane); /设置分层面板 Component getGlassPane(); /获得玻璃面板 setGlassPane(Component); /设置玻璃面板 JAVA 根 面 板面板(JPanel) 面板(JPanel)是一个轻量容器组件,用法与Panel相同,用于容纳界面元素,以便在布局管理器的设置下可容纳更多的组件,实现容器的嵌套。Jpanel,
20、JscrollPane, JsplitPane, JinteralFrame都属于常用的中间容器,是轻量组件。Jpanel的缺省布局管理器是FlowLayout。分层面板(JLayeredPane) Swing提供两种分层面板:JlayeredPane和JDesktopPane。 JDesktopPane是JLayeredPane的子类,专门为容纳内部框架(JInternalFrame)而设置。向一个分层面板种添加组件,需要说明将其加入哪一层,指明组件在该层中的位置:add(Component c, Integer Layer, int position)。 JAVA 面 板 和 分 层 面
21、板用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add( ponent)建立一个Jpanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板: Jpanel contentPane=new Jpanel( ); /把其它组件添加到Jpanel中; frame.setContentPane(contentPane); /把contentPane对象设置成为frame的内容面板 JAVA Jframe 添加组件的两种方式 Jav
22、a 最新的事件处理方法是基于授权事件模型 当事件来源对象因用户的操作(鼠标或键盘),系统会自动触发此事件类对象E,并通知所授权的事件监听者A(若来源对象已向A注册),事件监听者A中有处理各种事件的方法(事件处理者1n)便会处理此事件E的各种状况 。 JAVA 事 件 处 理 模 型事件类说明事件源ActionEvent 通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。 Button、List、MenuItem、TextField AdjustmentEvent 操纵滚动条时会生成此事件。 Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。 Checkbox、CheckboxMenuItem、Choice、List FocusEvent 组件获得或失去键盘焦点时会生成此事件。 Component JAVA 事 件 层 次 结 构事件类说明事件源KeyEvent 接收到键盘输入时会生成此事件。 Component MouseEvent 拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小熊与大树的对话童话作文(13篇)
- 个人成长潜能呈现承诺书6篇范文
- 公司出口商品质量保障承诺书(7篇)
- 2025南平市延平区疾病预防控制中心招聘驾驶员模拟试卷及参考答案详解一套
- 尊贵艺术珍品保真购藏承诺函(9篇)
- 2025年烟台市公费医学生考试选聘(139人)考前自测高频考点模拟试题带答案详解
- 企业资产采购标准合同范本
- 商业计划书制作流程工具
- 2025内蒙古鄂尔多斯市康巴什区青年就业见习计划招募考前自测高频考点模拟试题及答案详解(全优)
- 辽宁省葫芦岛市2024-2025学年高一下学期期末考试地理地理试卷(解析版)
- 武汉大学车辆管理办法
- 医废处置人员院感培训
- 《活泼的金属单质-钠》教案
- 护士(血液透析室)考试试题及答案
- 近三年安全生产业绩证明
- 投资者关系管理与投资者策略
- 冠脉造影手术病人的护理
- 项目风险管理预案
- 员工进出闸口管理制度
- JG/T 324-2011建筑幕墙用陶板
- 厂区防雷接地管理制度
评论
0/150
提交评论