您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第六章 Java图形界面
第六章Java图形界面图形界面(GraphicUserInterface)简称GUI,是用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。图形用户界面与字符界面相比,操作简单,画面生动,深受广大用户的欢迎,已经成为目前几乎所有应用软件的既成标准。本章主要讲述Java的图形界面技术,即使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器、绘图操作,等等。6.1AWT概述AWT即抽象窗口工具集(AbstractWindowTools),用于图形用户界面的开发。Sun公司在其早期发布的版本JDK1.0中就提供了AWT,在其随后的多个版本中又逐步加以改进。6.1.1AWT的功能AWT的功能包括以下方面:(1)丰富的图形界面组件;(2)强大的事件处理模型图形和图象工具,包括形状、颜色、字体;(3)布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率;(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作;(5)打印和无鼠标操作。java.awt是java基本包中最大的一个,其中定义了所有GUI组件类,以及以及其他用于构造图形界面的类,如字体类Font、绘图类Graphics和图像类Image等。表6-1列出了AWT中的主要软件包。表6-1AWT中的主要软件包AWT软件包描述java.awt基本组件实用工具java.awt.accessibility辅助技术java.awt.color颜色和颜色空间java.awt.datatransfer支持剪贴板和数据传输java.awt.dnd拖放java.awt.event事件类型和监听器AWT软件包描述java.awt.font2D字体软件包java.awt.geom2DAPI几何软件包java.awt.geom2DAPI几何软件包java.awt.lim引入方法java.awt.image图像处理工具包java.awt.print支持打印工具包6.1.2AWT的分类1.基本组件基本组件是图形界面的最小单位,里面不再包含其他的成分,如:按钮、Button复选框Checkbox、组合框Choice、列表List、文本域Textfield、多行文本域Textarea、静态文本Label、滚动条Scrollbar等。2.包容器(Container)包容器是一种特殊的组件,用来包含其他组件,如:面板Panel、窗口Windows、对话框Dialog、文件对话框Filedialog、框架Frame等。6.1.3AWT组件的类层次Component组件是所有AWT组件的基类,它提供了基本的显示和事件处理特征,Container类和其他UI组件都是从Component中派生出来的。图6-1为AWT组件的类层次结构图。ComponentButtonCanvasCheckboxLabelListScrollbarTextfieldTextareaContainerPanelWindowFrameDialigFiledialig图6-1AWT组件的类层次结构图Component类的主要方法有:voidenable():使组件可用voiddisable():使组件不可用voidshow():显示组件voidpaint():绘制图形voidrepaint():刷新voidshow():显示组件所有的UI组件都可继承或重载以上方法。Container类的主要方法:voidadd(Componentc):将指定组件c加入到容器中voidSetLayout():设置布局管理器所有的包容器组件都可继承或重载以上方法。6.1.4GUI简单实例例6.1一个简单的Applicationno61.javaimportjava.awt.*;publicclassno61extendsFrame{publicno61(){setTitle(ButtonExample);setLayout(newFlowLayout());//设置布局add(newButton(pushme));//加入按钮pack();show();}publicbooleanaction(Evente,Objectarg){System.out.println(((Button)e.target).getLabel());returntrue;}publicstaticvoidmain(Stringargs[]){newno61();}}运行以下编译和解释命令:javacenterjavano61enter说明:因为需要用到java.awt包,所以第一句代码为importjava.awt.*;第二句代码说明类no61继承了frame框架;在类no61的构造函数中,用frame的方法setTitle()设置了标题,用Container类的setLayout()方法设置布局,用Container类的add()方法加入了一个按钮组件,该组件上的标签为“pushme”;在action方法中实现了事件驱动,即在标准系统设备上输出按钮上的标签。例6.2一个简单的Applet,运行结果见图6-2no62.javaimportjava.applet.*;importjava.awt.*;publicclassextendsApplet{Labell1;TextFieldtxt1;Labell2;Buttonb1;Buttonb2;Labell3;publicvoidinit(){l1=newLabel(1+1=);add(l1);txt1=newTextField(1);add(txt1);b1=newButton(ok);add(b1);b2=newButton(cacel);add(b2);l2=newLabel(Youransweris:);add(l2);l3=newLabel(init);add(l3);}publicbooleanaction(Eventevt,Objectarg){Stringcaption=(String)arg;if(evt.targetinstanceofButton){if(caption==ok){intw=Integer.valueOf(txt1.getText()).intValue();if(w==2)l3.setText(right!);elsel3.setText(wrong!);}if(caption==cacel){txt1.setText();l3.setText();}}returntrue;}}对应的html文件如下:bodyh1thisisanexampleofjavaapplet.appletcode=no62width=300height=200/applet/body说明:该例是一个Applet类,所以除了“importjava.awt.*;”外,还需“importjava.awt.*;”。在Applet的init()方法中,创建并依次加入了以下组件:l1为静态文本,即提示信息“1+1=”;txt1为文本域,由用户输入答案;b1、b2分别为确定按钮和清除按钮;l3为静态文本,由系统输出用户是否回答正确。在action方法中实现了事件驱动,首先判断用户按下哪个按钮,如是确定按钮,则获取用户输入的答案,根据其对错更改l3的文本信息,如是清除按钮,则将文本域txt1及对错信息l3清空。该例子的运行结果如下图6-2:图6-2例6.2的效果图通过以上例子说明以下两点:(1)Java的GUI设计既可用于JavaApplication,也可用于JavaApplet。(2)Java的GUI设计包括以下方面:①界面上放置哪些组件,每个组件的功能及初始值是什么。②这些组件以什么样的布局放置。以上两例因组件较少,因此采用缺省的流式布局,本章后面会详细介绍Java布局管理器。③如何进行事件处理。即会发生哪些事件,相应进行什么处理。以上两例使用JDK1.0中的action方法中实现了事件驱动;在后面一章将详细介绍Java的事件处理机制。6.2AWT基本组件6.2.1标签组件(Label)标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用。1.Label的创建Label组件有三种构造函数:(1)Label():创建空的标签;(2)Label(String):创建一个带初始字符串的标签;(3)Label(String,int):创建一个带初始字符串及指定对齐方式的标签。其中对齐方式有几种形式:Left(左对齐)、Right(右对齐)、Center(居中对齐)。Label默认对齐方式为左对齐。2.Label的主要方法见表6-2:表6-2Label的主要方法方法功能SetText(String)设置显示内容getTest()获取显示内容getAlignment()获取对齐方式setAlignment()设置对齐方式例6.3下面是一个创建Label的简单实例,运行结果见图6-3LabelExample.javaimportjava.applet.*;importjava.awt.*;publicclassLabelExampleextendsApplet{publicvoidinit(){setLayout(newGridLayout(5,1));网格布局Labell1=newLabel();//创建空的标签add(l1);l1.setText(no1);//设置标签内容Labell2=newLabel(no2);//创建带初始内容的标签add(l2);Labell3=newLabel(Label.LEFT,Label.LEFT);//左对齐add(l3);Labell4=newLabel(Label.RIGHT,Label.RIGHT);//居中add(l4);Labell5=newLabel(Label.CENTER,Label.CENTER);//右对齐add(l5);}}运行结果如下图6-3:图6-3例6.3的效果图6.2.2文本域(Textfield)文本域一般用来让用户输入象姓名、信用卡号这样的信息,它是一个能够接收用户的键盘输入的小块区域。1.文本域的创建在创建文本域时,有四种参数类型:空的、空的并且具有指定长度、带有初始文本内容的和带有初始文本内容并具有指定长度的。例6.4下面是生成这四种文本域的实例,运行结果见图6-4:importjava.applet.*;importjava.awt.*;publicclassTxtExampleextendsApplet{TextFieldtf1,tf2,tf3,tf4;publicvoidinit(){tf1=newTextField();//空的文本域tf2=newTextField(20);//长度为20的空的文本域tf3=newTextField(你好);//带有初始文本内容的文本域tf4=newTextField(你好,30);//带有初始文本内容并具有指定长度的文本域add(tf1);add(tf2);add(tf3);add(tf4);}}运行结果如下图6.4:图6-4例6.4的效果图2.文本域的主要方法见表6-3。表6-3文本域的主要方法方法功能getColumns()返回文本域的列数getEchoChar()返回用于回显的字符setEchoCharacter(char)设置文本域的回显字符setEditable(Boolean)设置文本域是否为只读状态SetText(string)设置文本域中的文本值GetText()返回文本域中的输入文本值6.2.3按钮(Button)几乎所有的交互式程序中都会有按钮,它是一种交互能力强而交互方便的控件,这个组件提供了“按下并动作”的基本用户界面。1.构造方法:(1)Button():建立一个没有标示字符串的新按钮类对象。(
本文标题:第六章 Java图形界面
链接地址:https://www.777doc.com/doc-5359886 .html