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

优采云 发布时间: 2021-08-03 00:23

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

  Java 用户界面工具箱 AWT 的使用

  Java 编程语言类库提供了一个名为抽象窗口工具的用户界面工具箱

  Box,简称AWT(AbstractWindowingToolkit)。 AWT 不仅功能强大,而且

  而且使用起来简单灵活。本文介绍了 AWT 的基本原理以及如何创建一个小程序或一个

  创建简单用户界面的应用方法。

  一、什么是用户界面

  所谓的用户界面就是程序中与程序的用户进行交互的部分。用户访问

  端口有多种形式,从简单的命令行界面到图形用户界面。

  在系统的最底层,操作系统将鼠标和键盘输入的信息传递给程序,

  并提供像素作为程序输出。 AWT 旨在防止程序员使用

  关心鼠标的跟踪或键盘的细节,更别说写屏幕工作了

  。 AWT 提供了一个精心设计的、面向对象的

  对于这些低级服务和资源

  界面。

  由于 Java 编程语言是平台无关的,因此 AWT 也是平台无关的。

  AWT 为在不同平台上工作的图形用户界面设计了一个通用工具集

  。 AWT 提供的用户界面元素使用每个平台自己的 GUI 工具箱,所以有保证

  留下对应操作平台的外观。这是 AWT 最突出的特点之一。但是这种处理

  该方法的缺点是在某个软件平台上设计的图形用户界面在另一个平台上是平的。

  当它在舞台上运行时,它会改变。

  二、组件和容器

  图形用户界面由图形元素组件组成。典型组件包

  包括按钮、滚动条和文本框。该组件允许用户继续程序

  交互,并以视觉反馈的形式向用户提供程序状态。在 AWT 中,所有

  用户界面组件都是组件类或组件类的子类型的实例。

  组件不能单独存在,它总是放在容器中。容器收录和控制

  组件的布局,容器本身也是一个组件,也可以放在其他容器中。在 AWT 中

  在

  ,所有容器都是容器类的实例或容器类的子类型。

  图 1 描绘了在 Windows95 平台上显示的简单图形用户界面

  。图2显示了图1中界面组件的树状关系。

  三、组件类型

  图 3 展示了 AWT 提供的用户界面组件类之间的继承关系。组件类

  (组件类)定义了所有组件必须遵守的接口。

  图一

  图二

  图 3

  AWT 提供了 9 个基本的无容器组件类。使用它们来构建用户界面

  (当然,新的组件类可以从其中任何一个获取,也可以从组件类本身获取)。这9个

  类是按钮、画布、复选框、选择、标签、列表

  类、滚动条类、TextArea 类、TextField 类。

  四、容器类型

  AWT 提供了 4 个容器类。它们是 Windows 类及其两个子类型——Fram

  e 类和 Dialog 类和 Panel 类。除了AWT提供的容器外,Applet类也是

  一个容器,它是 Panel 类的子类型,可以容纳组件。图4显示

  AWT 提供的每个容器的简要说明。图4

  五、创建容器

  在添加构成用户界面的组件之前,程序员必须创建一个容器。什么时候

  在构建应用程序时,程序员必须首先创建一个Windows类或Frame类

  示例。构造Applet时,Frame类的实例已经存在,无需处理

  由音序器创建。由于Applet类是Panel类的子类,程序员可以申请Appl

  将组件添加到 et 类的实例中。

  代码 1 创建一个空框架。框架的标题(“Example1”)在构造函数中

  设置数字。 Frame一开始是不可见的,必须调用它的show()方法才能使之

  可见。

  代码 1:空帧

  importjava.awt.*;

  publicclassExample1

  {

  publicstaticvoidmain(Stringargs[])

  {

  Framef=newFrame("Example1");

  f.show();

  }

  }

  代码2扩展了代码1,新类继承了Panel类。在 main() 方法中,创建

  通过调用Frame类的add()方法构建并添加了这个新类的一个实例

  我对象。

  代码 2:带有空面板的框架

  importjava.awt.*;

  publicclassExamplelaextendsPanel

  {

  publicstaticvoidmain(Stringargs[])

  {

  Framef=newFrame("Example1a");

  Examplelaex=newExample1a();

  f.add("Center",ex);

  f.pack();

  f.show();

  }

  }

  以下示例中的新类继承自 Applet 类,而不是继承自 Panel 类。

  所以这个例子可以作为一个独立的应用程序或者嵌入到一个网页中

  上的小程序

  。此示例显示在代码 3 中。

  代码 3:一个带有空小程序的框架

  importjava.awt.*;

  publicstaticvoidmain(Stringargs[])

  {

  Framef=newFrame("Example1b");

  Exammple1bex=newExample1b();

  f.add("Center",ex);

  f.pack();

  f.show();

  }

  }

  注意:Windows 对象和 Dialog 对象在某些情况下可以替代 Frame 对

  大象。它们都是有效的容器。组件可以用同样的方式添加到每个容器中

  进入。

  六、将组件添加到容器中

  为了实用性,用户界面可以收录多个容器——每个容器收录

  组件。组件可以通过容器的 add() 方法添加到容器中。共有三个 add() 方法

  一种基本形式。使用的方法取决于容器上的布局管理器。

  代码4在代码3中添加了两个按钮的创建,创建在init()方法中

  当然。因为在小程序初始化的时候会自动调用。因此,无论程序如何打开

  一开始可以创建按钮,可以通过浏览器或者main()方法调用init()。

  代码 4:工具中有两个按钮的小程序

  importjava.awt.*;

  publicclassExample3extendsjava.applet.Applet

  {

  publicvoidinit()

  {

  add(newButton("one"));

  add(newButton("two"));

  }

  publicDimesionpreferredSize()

  {

  returnnewDimesion(200,100);

  }

  publicstaticvoidmain(stringargs[])

  {

  Framef=newFrame("Example3");

  Example3ex=newExample3();

  ex.init();

  f.add("Center",ex);

  f.pack();

  f.show();

  }

  七、组件布局

  到目前为止,我们还没有提到添加到容器中的组件是如何进行版本控制的

  表面布局。布局不是由容器控制,而是由容器相关的布局管理

  由进程控制。布局管理器决定了所有组件在容器中的放置方式

  。在 AWT 中,所有布局管理器类都实现了 LayoutManager 接口。

  AWT 提供了五种类型的布局管理程序,从简单到复杂不等。它

  我们是BorderLayout类、CardLayout类、FlowLayout类、GridBagLayou

  t 类,GridLayout 类。

  1.BorderLayout 类是所有窗口(框架和对话框)的默认布局

  管理程序。它有 5 个区域,如图 5 所示。这些区域被称为“北”,“

  南”、“东”、“西”和“中心”。图 5

  单个组件可以放置在这 5 个区域中的任何一个。什么时候改

  当封闭容器的大小发生变化时,每个边界区域的大小也会发生变化以使其足够

  该空间容纳放置在其中的组件。任何多余的空间都合并到中心区域。内容

  设备的 add() 方法用于向其添加组件。 add() 方法有两个参数,其中第一个

  参数是一个字符串对象,其中放置了组件区域的名称。

  2.当某个区域在不同时间收录不同的组件时,应该使用Carde

  rLayout 类。此类通常与 Choice 相关联。

  3.FlowLayout 类是所有 Panel 类(和 Applet 类)的默认布局管理程序

  前言。在容器中,它从左到右放置组件。当一行空间用完时,更新

  线

  开始存储。

  4.GridBagLayout 类是 AWT 提供的最复杂、最灵活的布局管理程序

  。可以水平和垂直排列组件,并且组件可以有不同的大小。

  5.GridLayout 只是在需要的行号中显示一串大小相同的组件

  以及由列号决定的位置。

  代码 5 使用布局管理器和更多用户界面组件。

  代码 5:一个更复杂的例子

  importjava.awt.*;

  publicclassExample4extendsjava.applet.Applet

  {

  publicvoidinit()

  {

  面板;

  setLayout(newBorderLayout());

  p=newPanel();

  p.add(newTextArea());

  add("中心",p);

  p=newPanel();

  p.add(newButton("one"));

  p.add(newButton("two"));

  Choicec=newChoice()

  c.addItem("one");

  c.addItem("两个");

  c.addItem("三");

  p.add(c);

  add("南",P);

  }

  publicstaticvoidmain(Stringargs[])

  {

  Framef=newFrame("Example4");

  Example4ex=newExample4();

  ex.init();

  f.add("Center",ex);

  f.pack();

  f.show();

  }

  }

  上面的例子只是展示了一个没有交互功能的用户界面。如果你让用户

  界*敏*感*词*有交互能力,所以必须涉及事件处理。

  每个事件收录以下参数:

  id 标识符;

  target-事件发生的对象;

  arg-任意参数;

  事件发生的x,y坐标;

  when 事件的时间印记;

  evt-相邻事件;

  key-键盘事件中按下的键;

  modifers-修饰键的状态(即ALT、CTRL)。

  用户将需要处理三种类型的事件,即键盘、鼠标、GUI/窗口

  。所有事件都在一般的handleEvent(Eventevt)方法中处理,但使用

  用户可以使用以下预定义的方法:

  可以在 KeyDown() 和 KeyUp() 方法中处理键盘事件;

  鼠标事件可以在mouseXXXX()方法中处理;

  GUI 事件在 action() 方法中处理。

  下面两段代码是等价的。

  publicbooleankeyDown(Eventevt,intkey)

  {

  System.out.println(key);

  返回假;

  }

  publicbooleanhandleEvent(Eventevt)

  {

  开关(evt.id)

  {

  caseEvent.KEY-PRESS:

  {

  System.out.println(evt.key);

  返回真;

  }

  默认:

  返回假;

  }

  }

  事件既可以发生在组件中,也可以发生在容器中,因为对于每个

  对于要处理的信息,它们都需要一个“扩展”类。所以处理容器中的事件

  比在组件中处理事件更好。

  --

  ※来源:.南大百合信息交换站。 [来自:]

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线