当前位置:文档之家› 第六章 Java图形界面

第六章 Java图形界面

第六章 Java图形界面图形界面(Graphic User Interface)简称GUI,是用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。

图形用户界面与字符界面相比,操作简单,画面生动,深受广大用户的欢迎,已经成为目前几乎所有应用软件的既成标准。

本章主要讲述Java的图形界面技术,即使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器、绘图操作,等等。

6.1 AWT概述AWT即抽象窗口工具集(Abstract Window Tools),用于图形用户界面的开发。

Sun公司在其早期发布的版本JDK1.0中就提供了AWT,在其随后的多个版本中又逐步加以改进。

6.1.1 AWT的功能AWT的功能包括以下方面:(1)丰富的图形界面组件;(2)强大的事件处理模型图形和图象工具,包括形状、颜色、字体;(3)布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率;(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作;(5)打印和无鼠标操作。

java.awt是java基本包中最大的一个,其中定义了所有GUI组件类,以及以及其他用于构造图形界面的类,如字体类Font、绘图类Graphics和图像类Image等。

表6-1列出了AWT 中的主要软件包。

表6-1 AWT中的主要软件包6.1.2 AWT的分类1. 基本组件基本组件是图形界面的最小单位,里面不再包含其他的成分,如:按钮、Button 复选框Checkbox 、组合框Choice 、列表List、文本域 Textfield、多行文本域Textarea、静态文本Label、滚动条Scrollbar等。

2. 包容器(Container)包容器是一种特殊的组件,用来包含其他组件,如:面板Panel、窗口 Windows 、对话框Dialog、文件对话框 Filedialog、框架Frame等。

6.1.3 AWT组件的类层次Component组件是所有AWT组件的基类,它提供了基本的显示和事件处理特征,Container 类和其他UI组件都是从Component中派生出来的。

图6-1为AWT组件的类层次结构图。

图6-1 AWT组件的类层次结构图Component类的主要方法有:void enable():使组件可用void disable():使组件不可用void show():显示组件void paint():绘制图形void repaint():刷新void show():显示组件所有的UI组件都可继承或重载以上方法。

Container类的主要方法:void add(Component c) :将指定组件c加入到容器中void SetLayout():设置布局管理器所有的包容器组件都可继承或重载以上方法。

6.1.4 GUI简单实例例6.1 一个简单的Application no61.javaimport java.awt.*;public class no61 extends Frame {public no61 (){setTitle("ButtonExample");setLayout(new FlowLayout());//设置布局add (new Button("push me"));//加入按钮pack();show();}public boolean action(Event e,Object arg){System.out.println(((Button)e.target).getLabel());return true;}public static void main(String args[]){new no61 ();}}运行以下编译和解释命令:javac <enter>java no61<enter>说明:因为需要用到java.awt 包,所以第一句代码为import java.awt.*;第二句代码说明类no61继承了frame框架;在类no61的构造函数中,用frame的方法setTitle()设置了标题,用Container类的setLayout()方法设置布局,用Container类的add ()方法加入了一个按钮组件,该组件上的标签为“push me”;在action方法中实现了事件驱动,即在标准系统设备上输出按钮上的标签。

例6.2 一个简单的Applet,运行结果见图6-2 no62.javaimport java.applet.*;import java.awt.*;public class extends Applet{Label l1;TextField txt1;Label l2;Button b1;Button b2;Label l3;public void init() {l1=new Label("1+1=");add(l1);txt1=new TextField(1);add(txt1);b1=new Button("ok");add(b1);b2=new Button("cacel");add(b2);l2=new Label("Your answer is:");add(l2);l3=new Label(" init ");add(l3);}public boolean action(Event evt,Object arg){String caption=(String)arg;if(evt.target instanceof Button){if(caption=="ok"){int w=Integer.valueOf(txt1.getText()).intValue();if(w==2)l3.setText("right!");elsel3.setText("wrong!");}if(caption=="cacel"){txt1.setText("");l3.setText("");}}return true;}}对应的html文件如下:<body><h1>this is an example of java applet.<applet code=no62width=300 height=200></applet></body>说明:该例是一个Applet类,所以除了“import java.awt.*;”外,还需“import java.awt.*;”。

在Applet的init()方法中,创建并依次加入了以下组件:l1为静态文本,即提示信息“1+1=”;txt1为文本域,由用户输入答案;b1、b2分别为确定按钮和清除按钮;l3为静态文本,由系统输出用户是否回答正确。

在action方法中实现了事件驱动,首先判断用户按下哪个按钮,如是确定按钮,则获取用户输入的答案,根据其对错更改l3的文本信息,如是清除按钮,则将文本域txt1及对错信息l3清空。

该例子的运行结果如下图6-2:图6-2 例6.2的效果图通过以上例子说明以下两点:(1)Java的GUI设计既可用于Java Application,也可用于Java Applet。

(2)Java的GUI设计包括以下方面:①界面上放置哪些组件,每个组件的功能及初始值是什么。

②这些组件以什么样的布局放置。

以上两例因组件较少,因此采用缺省的流式布局,本章后面会详细介绍Java布局管理器。

③如何进行事件处理。

即会发生哪些事件,相应进行什么处理。

以上两例使用JDK1.0中的action方法中实现了事件驱动;在后面一章将详细介绍Java的事件处理机制。

6.2 AWT基本组件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-2 Label的主要方法例6.3 下面是一个创建Label的简单实例,运行结果见图6-3 LabelExample.java import java.applet.*;import java.awt.*;public class LabelExample extends Applet{public void init() {setLayout(new GridLayout(5,1)); 网格布局Label l1=new Label("");//创建空的标签add(l1);l1.setText("no1"); //设置标签内容Label l2=new Label("no2");//创建带初始内容的标签add(l2);Label l3=new Label("Label.LEFT ",Label.LEFT); //左对齐add(l3);Label l4=new Label("Label.RIGHT ",Label.RIGHT);//居中add(l4);Label l5=new Label("Label.CENTER ",Label.CENTER);//右对齐add(l5);}}运行结果如下图6-3:图6-3 例6.3的效果图6.2.2 文本域(Textfield)文本域一般用来让用户输入象姓名、信用卡号这样的信息,它是一个能够接收用户的键盘输入的小块区域。

1. 文本域的创建在创建文本域时,有四种参数类型:空的、空的并且具有指定长度、带有初始文本内容的和带有初始文本内容并具有指定长度的。

例6.4下面是生成这四种文本域的实例,运行结果见图6-4:import java.applet.*;import java.awt.*;public class TxtExample extends Applet{TextField tf1,tf2,tf3,tf4;public void init() {tf1=new TextField();//空的文本域tf2=new TextField(20);// 长度为20的空的文本域tf3=new TextField("你好");//带有初始文本内容的文本域tf4=new TextField("你好",30);// 带有初始文本内容并具有指定长度的文本域add(tf1);add(tf2);add(tf3);add(tf4);}}运行结果如下图6.4:图6-4 例6.4的效果图2. 文本域的主要方法见表6-3。

相关主题