已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章 图形用户界面设计概述 现代的应用程序早已进入图形时代,命令 行程序只在特殊的时候才会使用。 Java提供了丰富的类用来生成图形用户接 口(Graphical User Interface,GUI)。 本章将讲述Java GUI的发展、AWT的构成 、布局管理器的应用及Java的事件处理 模型。 1 8.1 AWT概述 Java1.0包含一个用于GUI编程的类库,叫抽象窗 口工具箱(Abstract Window Toolkit, AWT)。 Java.awt包中最核心的类是Component类,是构成 Java图形用户界面的基础,所有其他组件都是从 Component类派生出来的。 注意:Component类是一个抽象类,不能直接使用 。 在Componen类中定义了AWT组件具有的一般功能 如大小和位置控制 ,外形控制,组件的状态控制 等 2 大小和位置控制 一个组件的大小和位置可以通过组件提供的一些方法来指定,相应 的方法包括setSize()、setLocation()等。 外形控制 可以通过getFont()、setFont()、setForeground()等方法设置组件中 的字体、颜色等。 基本绘画支持 方法repaint()、paint()、update()用于在屏幕上绘制组件,AWT绘 图系统通过一个单独的线程控制程序何时进行组件的绘制。 组件的状态控制 提供的有关组件状态控制方面的方法有:setEnable()、isEnable()、 isVisible()等。 从Component类派生出来的Container类用于表示GUI中的容器,该 类具有的功能是组件管理和布局管理。 在组件管理中,包含的方法有add()、remove()、getComponent()等 ,分别用于添加组件、删除组件和获得某个组件。 3 8.2 AWT基本组件 为了方便大家进行图形用户界面设计,本节介绍 AWT基本组件。 实际上一个图形用户界面就是由一些AWT基本组 件组成的。 按钮(Button) 按钮是AWT中最常见的一种组件,用户可以通过 单击操作, 如果希望按钮响应用户的单击操作,就需要实现 相关的鼠标单击事件,(8.5节) 按钮组件的生成方式如下: Button butobj = new Button (OK) 上面的语句生成了一个标记文字为OK的按钮。 4 复选框(Checkbox)单选框(Radio Button) 复选框和单选框组件都提供简单的“on/off”开关 单选框之间同一 时刻只能有一个 被选中 一组复选框之间没有 特定的约束关系,可 以有任意个复选框被 同时选中 5 复选框对象的生成方法 checkbox chbobj=new checkbox(one、null、 true); 第一个参数是复选框的文本标签; 第二个参数为复选框的组名, 组名为空,表示生成的对象是复选框 第三个参数代表复选框对象的状态,ture表示生 成的复选框对象为选中状态,false表示非选中 状态。 6 CheckboxGroup cbgobj = new CheckboxGroup (); Checkbox c1 = new Checkbox (one,cbgobj, true); Checkbox c2 = new Checkbox (two,cbgobj, false); 文本标签:显示在对象上 复选框组: 组名不为空,表示生成的对象是单选框 复选框对象状态:ture表示生成的复选框对象为选中状 态,false表示非选中状态。 单选框对象的生成方法 生成复选框组对象 生成复选框对象 格式:Checkbox name= new Checkbox (文本标签,复选框组, 复选框对象状态); 7 下拉式菜单(Choice) 下拉式菜单适用于有大量选项同时又需要节省窗口面积的 情况,每次只能选择下拉式菜单中的一项。 下拉式菜单对象的生成方式如下: choice choiObj = new Choice (); choiObj.add(class1); choiObj.add(class2); choiObj.add(class3); 以上生成了包含有class1、class2和class3的下拉式菜单。 标签(Lable) 标签可以说是最简单的一种组件,用于在界面上显示一行 文字,生成方式如下: Label labObj = new Label (Book name); 上面的语句生成了一个标记文字为Book name 的标签。 8 单行文本输入区(TextField)的几种生成方法 /生成一个空的单行文本输入区 TextField tfObj1 = new TextField(); /生成一个列数为5的单行文本输入区, TextField tfObj2 = new TextField(5); /生成一个文本内容为 name 的单行文本输入区 TextField tfObj3 = new TextField(name); /生成一个文本内容为name且列数为5的单行文本输入区 TextField tfObj4 = new TextField(name,5); 注意:TextField 只能显示一行 9 文本输入区(TextArea) TextArea用于显示多行多列的文本信息,生成方式如下: TextArea taObj = new TextArea (Hi,3,20); 在上面的语句中,第一个参数表示初始字符,第二个和第 三个参数分别表示行数和列数。 列数(List) 列表用于将多个文本选项显示在一个区域中,用户可以同 时查看若干个选项。 List Lobj= new List (2,false);/显示行数,是否允许多选。 Lobj.add(Sun); /在list中添加选项Sun Lobj.add(“Moon”);/在list中添加选项Moon 10 滚动窗口(ScrollPane) 是一种容器,不能单独使用,可以将其他组件添加到滚动 窗口中。 Scrollpane spObj = new Scrollpane ();/生成滚动窗口 spObj.add (pObj);/在滚动窗口中加入对象pObj 菜单(Menu) 菜单和其他组件不同,不能直接添加到容器中某一位置, 可以添加到菜单条或其他菜单中。 菜单条(MenuBar)是一种水平菜单,只能添加到Frame 对象中,作为菜单树的根基。 下面是菜单条对象生成和添加到Frame对象中的示例语句 : Frame frObj = new Frame (Frame title); MenuBar mbObj = new Mew MenuBar (); frObj.setMenuBar (mbObj); 11 在Java中,类Mune提供了标准的下拉菜单,生成的菜单对象可以 被添加到菜单条和其他菜单中。 Frame frObj = new Frame (Frame title); MenuBar mbObj = new MenuBar (); frObj.setMenuBar (mbObj): Menu mbObj1 = new Menu (File); Menu mbObj2 = new Menu (Edit); mbObj.add(mbobj1); mbObj.add(mbobj2); 一个菜单通常包含多个菜单项,菜单项对象生成后,通常需要添加 到相应的菜单中,如下示: Memu mobj = new Menu (File); MenuItem miobj1 = new MenuItem (Open); MenuItem miobj2 = new MenuItem (Save); mobj.add(miobj1); mobj.add(miobj2); 12 8.3 AWT容器 容器(Container)是Component的子类 因此容器本身也是一个组件,它具有组件的所有 性质,而且还具有容纳其他组件和容器的功能 。 本节将介绍Java中最常用的两种容器: Frame和Panel,其他容器请参阅java的相关文档 。 13 8.3.1 Frame Frame类是Window类的子类 它也是一种窗口,具有标题属性,可以按照常用 窗口一样调整大小。 可以将组件和面板添加到其中。 Java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame 图81 Frame类的继承关系层次图 14 Frame对象的生成 可以通过Frame类的构造方法Frame(String strObj)生成Frame对象,Frame的标题由 String类型的参数StrObj指定, 注意,这种方法生成的Frame对象默认情况下是 不可见的,初始大小为(0,0)。 可以通过setVisible和setSize方法设置Frame的可 见性和大小。 下面的语句生成一个标题为“Frame Example”、 大小为260160的可见Frame。 Frame frObj = new Frame (Frame Example ); FrObj.setSize (260,160); fr.setVisible(true); 15 8.3.2 Panel Panel和Frame一样,都是容器,也可以将组件 和其他面板添加到Panel中, 与Frame不同的是,Panel对象必须被放入 Window和Frame中才能可见,通常是使用 add()方法将Panel添加到Window和Frame中。 Java.lang.Object java.awt.Component java.awt.Container java.awt.Panel 图82 Panel类的继承关系层次图 16 下面的语句将生成的Panel对象添加到Frame中, 为了将两者区分开,Panel对象的背景设置为 红色。 Frame frObj = new Frame (Frame Example) ; Panel pPbj = new Panel (); pPbj.setSize (100,80); pPbj.setBackground (Color.red ); frobj.setSize (260,160); frObj.add (pObj ); frObj.setVisible (ture ); 17 8.4 布局管理器 布局管理器(layout manager)是用来安排容器 中多个组件的位置及大小,以确保GUI中各组 件能安排在适当的位置。 Java中的布局类型包括以下几种: FlowLayout(流式布局)BorderLayout (边界布局) GridLayout(网格布局) CardLayout (卡片布局) BoxLayout(框布局) GridBagLayout(网格包布局 ) 18 简单GUI程序 1java.awt包 称为抽象窗口工具集AWT(Abstract Window Toolkit),是使用Java进行GUI设计的基础。 2javax.swing包 Swing组件存放在javax.swing包中。几乎所有AWT 组件对应有新功能更强的Swing组件。另外还加入 了一些全新的组件。Swing组件在名称上前面多了 一个字母“J” 。 19 简单GUI程序 设置GUI应用程序的流程: (1)引用需要的包和类。 (2)设置一个顶层的容器。 (3)根据需要为容器设置布局管理器或使用 默认布局管理器。 (4)将组件添加到容器内,位置自行设计。 (5)为响应事件的组件编写事件处理代码。 20 容器、组件、布局和观感 1.容器和组件 组件是可以用图形化的方式显示在屏幕上并能 够与用户进行交互的对象。 容器是一种特殊的组件,一种能够容纳其他组 件或容器的组件。 2.布局管理器 为了使图形用户界面具有良好的平台无关性,提 供了专门用来管理组件在容器中的布局的工具。 3.观感 决定应用程序的外观。 21 8.4.1 FlowLayout 流布局管理器提供了一种非常简单的布局,用来 将一群组件置于一行。 它是JPanel的默认布局管理器。 流布局管理器会将组件安排在同一行(由左向右 排列)并维持组件原本所定义的大小,当此行 已经排满时,他会将剩余的组件自动排列到下 一行,而各行的组件会向中间对齐 也可以通过使用常量LEFT、CENTER或RIGHT 来改变默认地对齐方式 22 FlowLayout常用的构造函数 FlowLayout(): 生成一个FlowLayout对象。 FlowLayout(int align): 生成一个FlowLayout对象并指 定对齐方式(LEFT,CENTER,RIGHT),默认 为CENTER。 FlowLayout(int align, int hgap, int vgap): 生成一个 FlowLayout对象并指定对齐方式、同一行各组件之 间的间距(默认5像素)以及行间距(默认5像素) 。 FlowLayout的一些常用的方法: setAlignment(int align): 制定组件对齐的方式。 setHgap(int gap): 指定同一行各组件的距离。 setVgap(int gap): 指定各行之间的距离。 23 例8-1 流布局管理器 效果:设置祖父类(window) 的默认构造函数为window( FlowLayout) JFrame类的 getContentPane 24 8.4.2 BorderLayout 边框布局管理器可以将组件安置在5个不同的区 域,它们分为东、南、西、北、中,分别用常 量EAST,SOUTH,WEST,NORTH和CENTER表示。 注意,每个区域只能放置一个组件,若将组件置 于已有组件的区域,则原组件将被取代。 与流布局管理器不同的是,各区域的组件并不一 定会维持原来定义的大小,而是会充满各区域 所提供的空间。 常用的构造函数如下: BorderLayout():生成一个BorderLayout对象。 BorderLayout(int hgap,int vgap):生成一个 BorderLayout并指定组件间的水平和垂直间距 。 25 例8-2 边框布局管理器 26 27 8.4.3 GridLayout 网格布局管理器会根据指定的行列数目将一个容 器分割成几个一样大小的方形区域,每个区域 只能放置一个组件,而每个组件会完全使用该 区域所能使用的空间。 常用的构造函数如下: GridLayout():生成一个网格布局管理器,所有 组件会排列于同一列,而组件间的间隔为零( 默认值)。 GridLayout(int rows, int cols):生成具有 rows行和cols列的网格布局管理器。 GridLayout(int rows, int cols, int hgap, int vgap): 生成具有rows行和cols列并指定行间距为hgap ,列间距为vgap的网格布局管理器。 28 例8-3 GridLayout.java Pack():Causes this Window to be sized to fit the preferred size and layouts of its subcompone 29 8.4.4 CardLayout 卡片布局管理器可以让一群组件使用相同的空间,如同 一叠卡片,只有最上边的可以被看到。 常用的构造函数如下: CardLayout():生成一个卡片布局管理器。 CardLayout(int hgap, int vgap): 生成一个卡片布局 管理器,并指定卡片内组件之间的空间。 其他常用的方法如下:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 用电检查员变革管理模拟考核试卷含答案
- 接插件零件制造工岗前岗位安全责任制考核试卷含答案
- 苯乙烯-丙烯腈树脂(SAN)装置操作工安全素养评优考核试卷含答案
- 温差电电池制造工成果水平考核试卷含答案
- 顺酐装置操作工安全强化水平考核试卷含答案
- 综采集控工安全知识竞赛强化考核试卷含答案
- 矿灯和自救器管理工安全生产意识评优考核试卷含答案
- 精对(间)苯二甲酸装置操作工安全专项考核试卷含答案
- 燃气供应服务员安全演练模拟考核试卷含答案
- 钢琴调律师安全综合能力考核试卷含答案
- SCADA监控系统运维合同
- 2025年1月国家开放大学法律事务专科《刑事诉讼法学》期末考试试题及答案
- 作战标图基本知识
- 岐黄天使中医药理论和中医护理技术专项培训考核答案
- 膀胱肿瘤个案护理
- 贵州文物调查研究-从文物看中华民族共同体历史的区域实践知到智慧树章节测试课后答案2024年秋贵州民族大学
- 《制造企业的CTQ》课件
- 云南省昆明市西山区2023-2024学年高二上学期1月期末考试数学试题(解析版)
- 初中数学培训指导教育课件
- 交响音乐赏析知到智慧树章节测试课后答案2024年秋西安交通大学
- 骨科糖尿病病人的护理
评论
0/150
提交评论