用户接口工具是什么?

刚学java碰到的名词,请高手指教,谢谢.

Java用户接口工具箱AWT的使用

Jave编程语言类库提供了一个用户接口工具箱,叫做抽象窗口工具
箱,简称为AWT(Abstr act Windowing Toolkit)。AWT不但功能强大而
且使用起来简单灵活。本文介绍了AWT基本原理以及如何为applet或a
pplication创建简单用户接口的方法。
一、什么是用户接口
所谓用户接口是一个程序与程序的使用者交互的那部分。用户接
口有许多形式,从简单的命令行接口到图形用户接口,形式各异。
在系统的最低级,操作系统将鼠标和键盘输入的信息传送给程序,
并提供像素作为程序输出。AWT的设计目的是为了使程序设计者不用
关心跟踪鼠标或读取键盘的细节,更不用将注意力集中到写屏工作上
。AWT为这些低级的服务和资源提供了一个精心设计的、面向对象的
接口。
由于Java编程语言是独立于平台的,所以AWT也是独立于平台的。
AWT为工作于不同的平台上的图形用户接口设计了一个公共的工具集
。由AWT提供的用户接口元素使用每个平台自身的GUI工具箱,因此,保
留了相应运行平台的外观。这是AWT最突出的特点之一。但这种处理
方法的缺点是在某一个软件平台上设计的图形用户接口,在另一个平
台上运行时,将会有所改变。

二、组件和容器
图形用户接口是由图形元素——组件——组成的。典型的组件包
括buttons、scrollba rs和text fields。组件允许用户同程序进行
交互,并把程序状态以视觉反馈的形式提供给用户。在AWT中,所有的
用户接口组件都是组件类的实例或组件类的子类型。
组件不能单独存在,它总是被放置在容器中的。容器包含并控制
组件的布局,而容器本身也是组件,也能被放置在其他容器中。在AWT
中,所有的容器都是容器类的实例或是容器类的子类型。
图1中描绘了在Windows 95平台上显示的一个简单图形用户接口
。图2示出了图1中接口组件的树形关系。

三、组件的类型
图3示出了由AWT提供的用户接口组件类之间的继承关系。组件类
(Component类)定义了所有组件必须遵守的接口。
图1
图2
图3
AWT提供了9个基本的无容器组件类。用它们可以构造出用户接口
(当然,新组件类可以从它们中任何一个或从组件类本身获得)。这9个
类是Button类、Canvas类、Checkbox类、Cho ice类、Label类、List
类、Scrollbar类、TextArea类、TextField类。
四、容器的类型
AWT提供了4个容器类。它们是Windows类和它的两个子类型-Fram
e类和Dialog类以及Pa nel类。除了AWT提供的容器外,Applet类也是
一个容器,它是Panel类的一个子类型,而且能够容纳组件。图4给出了
由AWT提供的每个容器的简要说明。图4

五、创建容器
在加入组成用户接口的组件之前,程序员必须创建一个容器。当
构造一个应用程序时,程序员必须首先创建一个Windows类或Frame类
的实例。当构造一个Applet时,Frame类的实例就已经存在了,不用程
序员创建。既然Applet类是Panel类的子类型,因此程序员可以向Appl
et 类的实例中加入组件。
代码1创建了一个空frame。frame的标题("Example1")在构造函
数中设置。起初Frame是不可见的,必须调用它的show()方法才能使其
可见。
代码1:一个空frame
import java.awt.*;
public class Example1
{
public static void main (String args[])
{
Frame f=new Frame ("Example1");
f.show();
}
}
代码2扩展了代码1,新的类继承了Panel类。在main()方法中,创
建了这个新类的一个实例,通过调用Frame类的add()方法将其加到Fra
me对象中。
代码2:一个具有空Panel的Frame
import java.awt.*;
public class Examplela extends Panel
{
public static void main (String args[])
{
Frame f=new Frame ("Example 1a");
Examplela ex=new Example1a();
f.add ("Center",ex);
f.pack();
f.show();
}
}
下面例子中的新类从Applet类继承获得,而不是从Panel类获得。
因此这个例子既可以作为独立的application又可以作为嵌入在Web页
上的applet。这个例子在代码3中示出。
代码3:一个具有空applet的frame
import java.awt.*;
public static void main (String args[])
{
Frame f=new Frame ("Example 1b");
Exammple1b ex=new Example1b();
f.add("Center",ex);
f.pack();
f.show();
}
}
注:Windows对象和在一定情况下的Dialog对象,能够代替Frame对
象。它们都是有效的容器。组件可以用同样的方式加入到每一个容器
中。
六、把组件加到容器中
为了实用,用户接口可以包含不止一个容器——每个容器都包含
组件。组件可以通过容器的add()方法加入到容器中。add()方法有三
种基本形式。使用的方法依赖于容器上的布局管理程序。
代码4向代码3加入了两个按钮的创建。创建是在init()方法中执
行的。因为在applet初始化时,它被自动调用。因此,无论程序如何开
始,按钮都可创建,init()既可被浏览器调用也可被main()方法调用。
代码4:工具有两个button的applet
import java.awt.*;
public class Example3 extends java.applet.Applet
{
public void init()
{
add (new Button("one"));
add (new Button("two"));
}
public Dimesion preferredSize()
{
return new Dimesion (200,100);
}
public static void main (string args[])
{
Frame f=new Frame ("Example 3");
Example3 ex=new Example3();
ex.init();
f.add("Center",ex);
f.pack();
f.show();
}

七、组件的版面布局
到现在为止,我们还没有提及加入到容器中的组件是如何进行版
面布局的。版面布局不是由容器控制的,而是由与容器相关的布局管
理程序控制的。布局管理程序决定了所有组件在容器中是如何放置的
。在AWT中,所有的布局管理程序类都执行LayoutManager接口。
AWT提供了5种布局管理程序类,它们由简单到复杂各不相同。它
们是BorderLayout类、CardLayout类、FlowLayout类、GridBagLayou
t类、GridLayout类。
1.BorderLayout类是用于所有窗口(Frame和Dialog)的缺省布局
管理程序。它拥有如图5所描述的5个区域, 这些区域称为"North", "
South", "East", "West"和"Center"。图5
一个单独的组件可以放置到这5个区域中的任何一个里面。当改
变封闭的容器尺寸时,每个边界区域的尺寸也随之改变,使其有足够的
空间容纳放置在其中的组件。任何多余的空间都归并到中心区域。容
器的add()方法用来向其中加入组件。add()方法有两个变元,其中第
一个变元是放置组件区域名字的字符串对象。

2.当某一个区域要在不同的时间包含不同的组件时,应使用Carde
rLayout类。该类通常与Choice是关联的。

3.FlowLayout类是所有Panel类(和Applet类)的缺省布局管理程
序。在容器中,它将组件从左到右放置。当一行的空间用完后,便从新
的一行开始存放。
4.GridBagLayout类是AWT提供的最复杂、最灵活的布局管理程序
。它可以将组件水平和垂直排列,而且组件可具有不同的尺寸。

5.GridLayout简单地将尺寸相同的一串组件显示在所要求的行号
和列号所确定的位置上。
代码5使用了布局管理程序和更多的用户接口组件。
代码5:一个较复杂的例子
import java.awt.*;
public class Example4 extends java.applet.Applet
{
public void init()
{
Panel p;
setLayout(new BorderLayout());
p=new Panel();
p.add(new TextArea());
add ("Center",p);
p=new Panel();
p.add(new Button("one"));
p.add(new Button("two"));
Choice c=new Choice()
c.addItem ("one");
c.addItem ("two");
c.addItem ("three");
p.add (c);
add("South",P);
}
public static void main (String args[])
{
Frame f=new Frame ("Example 4");
Example4 ex=new Example4();
ex.init();
f.add("Center",ex);
f.pack();
f.show();
}
}
上面的例子只是显示了一个无交互能力的用户接口。如果使用户
接口具有交互能力,就必须涉及到事件处理。
每个事件包含如下的参数:
id-标识符;
target-事件发生的对象;
arg-任意变元;
x,y-发生事件的坐标;
when事件的时间印迹;
evt-相邻的事件;
key-键盘事件中被按下的键;
modifers-修饰键的状态(即ALT、CTRL)。
用户将需要处理三种类型的事件,即键盘、鼠标、GUI/Windowing
。所有的事件都在一般的handleEvent(Event evt)方法中处理,但用
户可以使用如下预先定义的方法:
键盘事件以在KeyDown()和KeyUp()方法中处理;
鼠标事件可以在mouse XXXX()方法中处理;
GUI事件在action()方法中处理。
下面的两段代码是等价的。
public boolean keyDown (Event evt,int key)
{
System.out.println(key);
return false;
}
public boolean handleEvent (Event evt)
{
switch(evt.id)
{
case Event.KEY-PRESS:
{
System.out.println(evt.key);
return true;
}
default:
return false;
}
}
事件既可以在组件中发生,也可以在容器中发生,因为对于每个被
处理的信息来说,它们都需要一个"扩展"类。所以在容器中处理事件
比在组件中处理事件要好。

--
※ 来源:.南大小百合信息交换站 bbs.nju.edu.cn.[FROM: hsia.nju.edu.cn]

参考资料:南大小百合信息交换站 bbs.nju.edu.cn.[FROM: hsia.nju.edu.cn]

温馨提示:答案为网友推荐,仅供参考
相似回答