校园二手物品交易网站的设计与实现外文翻译资料

 2022-04-18 22:55:42

英语原文共 23 页,剩余内容已隐藏,支付完成后下载完整资料


简介

Gui

这是介绍Swing包中的基础类以及如何使用这些类定义GUI的两个章节的第一章。GUI是用来处理用户输入输出的窗口界面。整本书都被卸载Swing上,因此我们也无法用这几章就完整的介绍Swing,但是这几章确实可以教会你去写出一些窗口界面。

AWT

AWT(抽象窗口工具包)是被设计用来实现窗口界面的一个比较老的包,Swing可以看做是AWT包的升级版本。然而,Swing并没有完全取代AWT包,一些AWT类被Swing类所替代,但某些AWT包在使用Swing仍会被需要,所以我们会同时使用来自Swing和AWT的类型。

前提知识

在学习这一章之前,你需要先阅读过第1到5章,第7章(继承),第13章(接口与其他内部类),第8章的8.2节(抽象类),除过这一章的最后一分段,你不在需要阅读其他的先导章节。

最后一分段名为“Swing 计算器”需要你先阅读第9章了解异常处理,如果你还没有读过第9章,可以跳过这一部分。

17.1 事件驱动编程

事件驱动编程是一种使用信号与响应方式的编程风格,信号对于对象来说就是事件,一个我们本章就要说明的概念。

事件与监听者

Swing程序使用事件与事件处理程序。事件是一个充当另一个被称为监听者的对象的信号对象。发送事件被称为触发事件。触发事件的对象通常是GUI组件,比如按钮。按钮触发事件以响应被单击。监听器对象在响应事件时执行一些操作。例如,监听器可能会将消息放在屏幕上,以响应被单击的某个按钮。一个给定组件可能有任意数量的侦听器,从零到若干监听器。每个监听器可能响应不同类型的事件,或者多个侦听器可能响应相同的事件。

如果你已经阅读过关于异常处理的第9章,那么你已经看到了一个事件驱动编程的典型示例。异常对象是一个事件。抛出异常是触发事件(在这个例子中是触发异常事件)的示例。监听器是捕获事件的捕获块。

在Swing gui中,事件通常表示一些操作,例如单击鼠标、拖动鼠标、按键盘上的键、单击窗口的关闭窗口按钮或任何其他可能引发响应的操作。监听器对象具有指定监听器接收各种事件时将发生什么情况的方法。这些处理事件的方法称为事件处理程序。程序员将定义(或重新定义)这些事件处理程序的方法。像按钮这些事件触发对象和事件处理监听器之间的关系显示在图17.1。

事件驱动编程与你之前看到的大多数编程有很大不同。我们以前的所有程序都是按顺序执行的语句列表。有循环重复语句和分支,并选择一个语句序列来执行下一步。但是,在某种程度上,程序的每一次运行都包含一个由一个代理(计算机)执行的语句序列。接下来发生的事情取决于下一个事件。就好像监听者是机器人一样,与其他对象(可能是其他机器人)相互作用,以响应来自其他对象的事件(信号)。你给机器人编程,但是环境和其他机器人决定了特定的机器人最终会做什么。

图17.1 事件触发与一个事件监听者

如果你以前从未做过事件驱动编程,你可能会觉得奇怪:你将要定义一个在任何程序中都不会调用的方法。这在开始时可能会有点奇怪,因为一个方法是没有价值的,除非它被调用。所以,除你之外的某个人或某个事,一定要调用这些方法。这确实发生了。当事件信号需要调用该方法时,Swing系统会自动调用某些方法。

使用Swing库的事件驱动编程广泛使用了继承。你定义的类将派生一些基本Swing库中类。这些派生类将从它们的基类继承方法。对于许多这些继承的方法,库软件将决定这些方法何时被调用,但是你会重写继承方法的定义,以确定在调用方法时将发生什么。

17.2 按钮,事件,和其他Swing基础

在这一节中,我们介绍了足够多Swing的内容可以帮你做一些简单的GUI程序。

例:一个简单的窗口

图17.2包含一个生成简单的窗口Swing程序。这个窗口只包含一个按钮,上面写着“点击结束程序”。如果用户按下指令并用鼠标点击按钮,程序便会结束。

导入语句给出所使用的类的名称和它们所在的包的名称。我们所调用的Swing库是名为javax.swing的包。AWT库是包java.awt。注意,一个包名包含一个“x”,而另一个不包含。

这个程序是一个只含一个主要方法的简单类定义。主方法中的第一行创建了类JFrame的对象。这条线的复制如下:

JFrame firstWindow = new JFrame();

这是一个名为firstWindow的变量的一般声明,并调用类JFrame的无参数构造函数。JFrame对象是一个基本窗口,其中包括一个边框和通常的三个按钮,用于将窗口最小化到图标,改变窗口的大小,以及关闭窗口。这些按钮显示在窗口的右上角,这是典型的,但是如果你的操作系统通常将这些按钮放置在其他地方,那么它们很可能位于您的计算机的JFrame中。

JFrame窗口的初始大小是使用JFrame方法setSize设置的,如下所示:

firstWindow.setSize(WIDTH, HEIGHT);

在这种情况下,宽度和高度被定义为int常量。测量单位是像素,所以窗口产生的像素是300像素*200像素大小。(在名为“像素”的框中定义“像素”),与其他窗口一样,可以通过使用鼠标拖动JFrame窗口的一个角来改变JFrame的大小。

将窗口最小化到图标的按钮,以及改变窗口大小的按钮,就像使用的其他窗口一样。最小化按钮将窗口缩小到一个图标。(要还原窗口,单击图标。)第二个按钮将窗口的大小从全屏缩小到较小的大小。关闭窗口按钮的行为方式不同,取决于程序的设置方式。

关闭窗口按钮的行为设置setDefaultCloseOperation 的JFrame方法。设置关闭窗口按钮行为的程序行如下:

firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

在这种情况下,参数JFrame.DO_NOTHING_ON_CLOSE是一个名为DO_NOTHING_ON_CLOSE的定义常量,它在JFrame类中定义。这样设置了关闭窗口按钮,这样当它被点击时,什么都不会发生(除非我们编写了一些程序,而我们还没有完成)。其他可能的参数见图17.3。

方法setDefaultCloseOperation有一个int参数;在图17.3中描述的每个常量都是一个int常量。但是,不要把它们看作int值。把它们看作是当用户单击关闭窗口按钮时发生的事情的策略。用int值来命名这些策略是很方便的。但它们也可以使用char值或字符串值或其他东西来命名。

JFrame可以添加例如按钮、菜单和文本标签的组件。比如图17.2的下面一行将名为endButton的JButton对象添加到名为firstWindow的JFrame中。

firstWindow.add(endButton);

我们通过跳到程序的最后一行来结束这一节。

firstWindow.setVisible(true)

这使得JFrame窗口在屏幕上可见。第一眼觉得这可能很奇怪。为什么不让窗口自动显示出来呢?如果不想让窗口可见,为什么要创建窗口呢?答案是你可能不希望它在任何时候都是可见的。您肯定体验过消失和再现的窗口。为了隐藏窗口,你可以用false替换true。

图17.2 一个Swing程序示例

注意:别忘记编写关闭窗口按钮

图17.2的剩余几行代码确保当用户单击关闭窗口按钮时,什么都不会发生:

firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

如果你忘记对关闭窗口按钮进行编程,那么默认操作就好像您已经设置了如下方式:

firstWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)

在图17.2的程序中,这意味着如果用户单击关闭窗口按钮,窗口将会隐藏(变得不可见和不可访问),但是程序不会结束,这是一个非常糟糕的情况。因为窗口将被隐藏,所以没有办法点击“点击结束程序”按钮。您需要使用一些操作系统命令来迫使程序结束。这是关于操作系统的话题,而无关Java,这个命令取决于你的操作系统。

按钮

按钮对象的创建方式与创建其他对象的方式相同,但使用的是类JButton。例如,图17.2的示例创建一个按钮:

JButton endButton = new JButton('Click to end program.');

在这种情况下,构造的参数是“点击结束程序”,这是在按钮被按下时将要显示的字符串。

我们已经讨论了将例如按钮这样的组件添加到JFrame中。该按钮将由图17.2的下列行代码添加到JFrame中。

firstWindow.add(endButton);

在下一节中,我们将解释来自图17.2的其他代码,其中涉及到addActionListener方法。

动作监听者和动作事件

单击鼠标(或在GUI中激活某些其他项目)将创建一个名为事件的对象,并将这个事件对象发送给另一个名为监听者的对象。这叫事件的触发。然后监听者执行一些操作。当我们说事件被“发送”到侦听器对象时,我们的意思是,监听者对象中的某个方法将作为参数被事件象调用。这种调用是自动的。Swing GUI类定义通常不会包含这种方法的调用。但是,Swing GUI类定义确实需要做两件事:

bull;首先,对于每个按钮,需要指定哪些对象是响应这个按所钮触发的事件的监听者,这些对象称为注册监听者。

bull;其次,它必须定义当事件发送给监听者时将要调用的方法。注意,这些方法将由你定义,但是在正常情况下,你永远不会编写这些方法的调用,调用将自动进行。

图17.2的下面几行代码创建了一个名为buttonEar的EndingListener对象,并将buttonEar注册为监听者,以从名为endButton的按钮接收事件:

EndingListener buttonEar = new EndingListener( ); endButton.addActionListener(buttonEar)

第二行表示,buttonEar被注册为一个监听者到endButton,这意味着buttonEar将接收endButton触发的所有事件。

不同类型的组件需要不同类型的监听者类来处理它们触发的事件。按钮触发称为动作事件的事件,该事件由称为动作监听者的监听者处理。

动作监听者是一个对象,它的类实现了ActionListener接口。例如,图17.2的类EndingListener实现了ActionListener接口。ActionListener接口只有一个必须实现的方法,即:

public void actionPerformed(ActionEvent e)

{

System.exit(0);

}

如果用户单击按钮endButton,它将向该按钮的动作监听者发送一个动作事件。但是buttonEar是按钮endButton的动作监听者,所以动作事件就会变成buttonEar。当一个动作监听者接收一个动作事件时,该事件会自动作为参数传递给actionPerformed的方法,并调用actionPerformed方法。如果事件被称为e,则响应endButton触发e时发生以下调用:

buttonEar.actionPerformed(e);

在这种情况下,方法actionPerformed忽略了参数e。方法actionPerformed简单地调用System.exit从而结束程序。因此,如果用户单击endButton(标记为“点击结束程序”),那么最终的效果是结束程序,因而窗口就会消失。

注意,你从不为此编写任何代码如:

buttonEar.actionPerformed(e);

这个操作确实发生了,但是这个代码被嵌入到Swing或AWT库中的一些类定义中。代码中某处有类似的东西比如:

bla.actionPerformed(e);

然后,buttonEar被插入到参数bla中,并且这个调用将被执行。但这些都是为你做的。你所要做的就是定义方法actionPerformed并将buttonEar注册为endButton的监听者。

注意,actionPerformed的方法必须有ActionEvent类型的参数,即使你的actionPerformed定义中不使用这个参数。这是因为actionPerformed的调用已经为您编程了,因此必须允许使用ActionEvent参数e的可能性。

第一个例子是一个特殊的、简单的例子,因为只有一个按钮。在本章后面,我们将更多地讨论在更复杂的情况下定义actionPerformed方法。

提示:结束一个Swing程序

GUI程序通常基于一种无限循环。在GUI程序中可能没有Java循环语句,但是GUI程序不需要结束。窗口系统通常停留在屏幕上,直到用户指示它应该消失(例如,单击“单击以结束程序”按钮,图17.2)。如果用户从不要求

全文共8541字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[13645],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。