资源预览内容
第1页 / 共129页
第2页 / 共129页
第3页 / 共129页
第4页 / 共129页
第5页 / 共129页
第6页 / 共129页
第7页 / 共129页
第8页 / 共129页
第9页 / 共129页
第10页 / 共129页
亲,该文档总共129页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
项目6 用户图形界面,6.1 项目概述 6.2 项目目的 6.3 项目支撑知识 6.4 项目实施 6.5 项目总结 6.6 扩展演练,6.1 项目概述,本项日为Java GUI实现。,返回,6.2 项目目的,掌握图形用户界面实现的基本原理和方法。 .掌握Java语言中图形用户界面程序的编写。 .了解Java语言中图形用户界面的构造与设计。,返回,6.3 项目支撑知识,抽象窗口工具包AWT ( Abstract Window Toolkit)是API为Java程序提供的建立图形用户界面GUI的工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括用户界面组件、事件处理模型、图形和图像工具、布局管理器等。 6.3.1项目支撑知识 AWT图形用户界面设计,下一页,返回,6.3 项目支撑知识,组件(Component ) Component类是许多组件类的父类,是一个封装了组件通用的方法和属性的抽象类。在屏幕上显示的所有用于用户交互的用户界面元素都是Component类的子类。这个类定义了组件通用的属性和一百多个用于事件管理的公共方法,属如组件大小、显示位置、前景色和背景色、边界、可见性等,事件包括鼠标或键盘的输入,窗口位置或大小的改变以及重绘窗口等。 2.容器(Container),上一页,下一页,返回,6.3 项目支撑知识,Container类是Component类的子类。容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其他组件和容器。Container类有一些附加方法,允许别的Component对象嵌套在Container类的对象中。当然,其他的Container对象可以被存放在一个Container对象中,这就形成了一个多层包容机制。为了使生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器(LayoutManager)来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。,上一页,下一页,返回,6.3 项目支撑知识,3.面板(Panel ) Panel类是Container类的一个具体的子类。它没有添加任何新的方法,只是简单地实现了Container类。一个Panel对象可以被看作是一个递归嵌套的具体的屏幕组件。Panel类是Appler类的子类。当屏幕输出直接传递给一个小应用程序时,它将在一个Panel对象的表面被画出。实际上,一个Panel对象是一个不包含标题栏、菜单栏以及边枢的窗口。这就是为什么在浏览器中运行一个小应用程序时,看不见标题栏、菜单栏以及边枢的原因。而当用小应用程序查看器来运行一个小应用程序时,小应用程序查看器提供了标题和边枢。,上一页,下一页,返回,上一页,6.3 项目支撑知识,其他的组件可以通过调用Panel类的add()方法被加入到一个Panel对象中,这个方法是从Container类继承来的。一旦这些组件被加入,通常就可以通过调用在Component类中定义了的setLocation(),SetSize()以及setBounds()方法来改变这些组件的位置和大小。 4.窗口(Window) 窗口类产生一个顶级窗口(Window)。顶级窗口不包含在任何别的对象中它直接出现在桌面上。通常,不会直接产生Window对象,而使用Window类的子类Frame类。,下一页,返回,6.3 项目支撑知识,5.框架(Frame ) Frame类封装了窗口通常所需要的一切组件,它是Window类的子类,并且拥有标题栏、菜单栏、边框以及可以调整大小的角。如果在一个小应用程序中创建了一个Frame对象,它将包含一个例如“Java Applet Window”的警告消息给用户,表示一个小应用程序窗口已经被创建。这个消息警告用户,他们看见的窗口是由小应用程序启动的,而不是被运行在他们机器上的软件所启动(一个伪装基于主机的应用程序的小应用程序将可以用于在用户不知道的情况下获得密码和其他敏感信息)。当一个Frame窗口被程序而不是小应用程序创建时,就创建了一个涌常的窗口。,上一页,下一页,返回,6.3 项目支撑知识,6.画布(Canvas ) 虽然画布不是小应用程序和Frame窗口的层次结构的一部分,但是Canvas这种类型的窗口是很有用的(Canvas类封装了一个可以用来绘制的空自窗口。) 6.3.3项目支撑知识3事件处理概述 在设计和实现用户界面的过程中,主要是完成两个任务:第一是创建窗口并在窗口中添加各种组件,指定组件的属性和在窗口中的位置,从而构成图形界面的外观效果;第二是设置各种组件对不同事件的响应,从而实现图形用户的交互。,上一页,下一页,返回,6.3 项目支撑知识,事件处理就是对按钮单击、鼠标移动等情况作出反应的过程。在事件处理的过程中,主要涉及三类对象。 事件(Event)就是用户对图形界面操作的描述,以类的形式出现,如键盘操作对应的事件类就是Keyevent。 事件源(Event Source)就是事件发生的场所,通常就是各个组件,例如按钮Button。 事件处理者(Event handler)就是接收事件对象并对其进行处理的对象。 当用户做某些事情(例如单击鼠标),系统将创建一个相应表达该动作的事件,并传送该事件给程序中的事件处理代码(该代码决定了怎样处理事件),以便让用户得到相应的回应。如图6-2所示AWT事件传递和处理机制。,上一页,下一页,返回,6.3 项目支撑知识,例如,如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而Java运行时系统会生成ActionEvent类的对象actionE ,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收由Java运行时系统传递过来的事件对象actionE并进行相应的处理。 图形用户界面的每个可能产生事件的组件被称为事件源,不同事件源上发生的事件的种类不同。事件类的层次结构如图6-3所示。,上一页,下一页,返回,6.3 项目支撑知识,如果希望事件源上发生的事件被程序处理,就要把事件源注册给能够处理该事件源上那种类型事件的监听者。监听者之所以具有监听和处理某类事件的功能,是因为它实现了有关的接口,所以监听者需要对它所实现的接口的所有抽象方法写出具体的方法体,对应事件源上发生的事件的处理代码就写在这些方法体里。理解AWT中事件的处理是重要的,没有事件,应用程序就无法响应用户的活动。Java语言中存在各种不同类型的事件类用来描述各种类型的用户交互。,上一页,下一页,返回,6.3 项目支撑知识,在Java语言的事件处理机制中,不同的事件由不同的监听者处理,所以Java.awt.event包中还定义了11个监听者接口,每个接口内部包含了若干处理相关事件的抽象方法。一般来说,每个事件类都有一个监听者接口与之相对应,每个接口还要求定义一个或多个方法。当发生特定的事件时,就会调用这些方法。表6-1列出了这些(事件)类型,并给出了每个类型对应的接口名称,以及所要求定义的方法。 从表6-1中不难看,ActionEvent类事件对应的接口是ActionListener,这个接口定义了抽象方法为public void actionPerformed (ActionEvent) 。,上一页,下一页,返回,6.3 项目支撑知识,凡是要处理ActionEvent事件的类都必须实现ActionListener接口,实现ActionListener接口就必须重载上述的actionPerformed()方法,在重载的方法体中,通常需要调用参数c的有关方法。 6.3.4项目支撑知识4 AWT控件 控件(controls)是允许用户和应用程序用各种方式进行交互的组件,AWT支持的控件有标签、按钮、复选枢、选择列表、列表枢、滚动条、文本枢等,这些控件都是Component类的子类。,上一页,下一页,返回,6.3 项目支撑知识,1.标签 标签是用户不能修改只能查看其内容的文本显示区域,它起到信息说明的作用,每个标签用一个Label类的对象表示。 Label提供的构造方法如下: Label() Label(String text) Label(string text,int alignment) 其中,text为标签上显示的文本,alignment是对齐方式,有3个值:CENTER、LEFT、RIGHT。,上一页,下一页,返回,6.3 项目支撑知识,如果希望修改标签上显示的文本,则可以使用Label对象的方法setText()。同样,可以通过调用Label对象的getText()方法来获得它的文本内容。例如,下面的程序段将修改标签中的文本内容:,上一页,下一页,返回,6.3 项目支撑知识,由于标签不能接收用户的输入,所以不能引发事件。它不是事件源。 2.按钮 按钮是图形用户界面中非常重要的一种组件,它一般对应一个事先定义好的功能操作,并对应一段程序。当用户单击按钮时,系统自动执行与该按钮相关联的程序,从而完成预先指定的功能。Button提供的构造方法如下: Button() Button(String text)/制定了按钮上的标签文字,上一页,下一页,返回,6.3 项目支撑知识,调用按钮的getLabel()方法可以返回按钮上标签字符串;调用按钮的setLabel()方法可以修改按钮的标签字符串。 按钮可以引发动作事件,当用户单击一个按钮时会引发一个动作事件。如果希望响应按钮引发的动作事件的程序,必须把按钮注册给实现了ActionListener接口的动作事件监听者,同时,为这个接口的actionPerformed (ActionEvent e)方法书写方法体。在方法体中,可以调用e. getSource()方法来获取引发动作事件的按钮对象,也可以调用e. getActionCommand()方法来获取按钮的标签或事先为这个按钮设置的命令名。,上一页,下一页,返回,6.3 项目支撑知识,ActionEvent类只包含一个事件,即执行动作事件ACTION-PERFORMED。它是由某个动作引发的执行事件。能够触发这个事件的动作包括: (1)单击按钮; (2)双击一个列表中的选项; (3)选择菜单项; (4)在文本枢中输入内容后回车。 ActionEvent类的主要方法有: (1)public String getActionCommand(),上一页,下一页,返回,6.3 项目支撑知识,这个方法返回引发事件的动作的命令名,这个命令名可以通过调用setActionCommand()方法指定给事件源组件,也可以使用事件源的默认命令名。 (2)public int getModifiers() 如果发生动作事件的同时用户还按了Ctrl, Shift等功能键,则可以调用这个事件的getModifiers()方法来获得和区分这些功能键,实际上就是把一个动作事件再细分成几个事件;把一个命令细分成几个命令。将getModifiers()方法的返回值与ActionEvent类的几个静态常量ALT MASK , CTRL MASK , SHIFT MASK , META MASK相比较,就可以判断用户按下了哪个功能键。,上一页,下一页,返回,6.3 项目支撑知识,3.文本框与文本区 文本组件(TextComponent)类是用于编辑文本的组件,此类包括了文本枢(TextField)和多行文本区域(TextArea)两种子类。 (1)TextField类。 TextField类用于编辑单行文本,它只有一行。TextField类提供了多种构造方法,用于创建文本枢组件的对象。常见的构造方法的使用如下:,上一页,下一页,返回,6.3 项目支撑知识,其中text为文本枢中初始字符串,columns为文本枢容纳字符的个数。 例如,使用textField text1=new text
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号