Java 中的事件处理:那是什么以及它是如何工作的?

已发表: 2020-03-21

任何基于图形用户界面或 GUI 的程序,包括用于 Windows 的 Java 应用程序,都是由事件驱动的。 对于像 Java 应用程序这样有用的程序,需要对来自用户的命令或输入提供响应。 Java 应用程序具有捕获用户操作的事件。 在讨论 Java 中的事件处理之前,让我们从讨论事件开始。

目录

什么是事件?

事件在每种编程语言中都具有相同的含义和重要性。 它们是由用户控制的外部效果,使您的应用程序的行为符合预先定义的条件,以记录其对不同用户操作的响应。 一个事件甚至可以被称为一个对象,当 GUI 内发生更改时,该对象就会生机勃勃。

Java 中的事件示例包括输入字符或文本、单击组合框、单击按钮或来自用户的任何其他操作。 任何此类操作都会触发一个事件,然后会导致创建与该事件相关的事件对象。

例如,如果用户输入一些数据(触发事件的用户操作),应用程序会通过弹出对话框或显示信息(事件对象)来生成输出。 这些与事件相关的行为是 Java 事件处理机制的一部分,并且存在于 Swing GUI 库中。 需要注意的是,每个事件的源和事件侦听器都必须链接。 如果不是这种情况,事件的触发将不会产生任何动作。

为什么程序或应用程序需要事件驱动?

在事件处理出现之前,程序必须自己收集所有用户信息,以了解它在给定时间点正在做什么。 这意味着在运行或初始化之后,程序总是处于等待用户做某事的大循环中。

因此,该程序正在寻找任何动作——从按下按钮到滑块移动。 在它知道用户方面发生了某些事情后,它准备自己提供适当的响应。 这称为轮询。 尽管轮询可以完成工作,但通常情况下,它会被认为是一项太难以管理且耗时的任务。

阅读: Java 开发人员面试问答

如果我们考虑将它用于现代应用程序,它并不真正符合要求。 两个主要原因使轮询不适合现代应用程序 - 轮询将所有与事件相关的代码放在大重复循环中,并且在此位置内发生的交互过于复杂。 此外,轮询使程序进入一个永无止境的循环,这会导致 CPU 周期耗尽,而无法保证来自用户的操作。

Abstract Window Toolkit 或 AWT 已经向前推进,并与解决上述问题的不同工作模型建立了联系。 这种新模型是事件驱动的编程。 使用 AWT,程序就无需寻找用户生成的事件。 完成这项工作的是 Java 运行时。 一旦事件发生,它就会提示程序。 它可以节省宝贵的资源,并更好地处理用户交互。

什么是 Java 中的事件处理程序以及它们如何工作?

现在让我们讨论我们着手处理的主要主题。 Java 中的事件处理是如何工作的?

如前所述,事件是使应用程序以某种方式运行的用户操作或外部效果。 在 Java 中,AWT 组件(包括文本框、按钮等)负责事件的生成。 一旦生成事件,侦听器就会处理它并执行适当的操作。

Java 中的事件处理包括四个元素。 这些甚至可以称为事件处理程序。

1.事件源:产生事件的事件源多为AWT组件。 您可以运行java.awt.component命令来了解在生成事件中可能起或不起任何作用的组件。 组件是原始源类的子类。 事件源可以是任何东西,从文本框和组合框到按钮等等。

阅读: Java 中的 MVC 架构

2. 事件类:在 Java 中,这些类几乎涵盖了与事件生成有关的所有组件。 这些也称为事件类型。 以下是一些最常见的事件类:

  • ActionEvent :此事件类或事件类型表示涉及单击图形元素(例如按钮或列表项)的事件。 与该类相关的监听器是 ActionListener。
  • KeyEvent :此事件类表示涉及按下和释放键的事件。 与此类关联的侦听器是 KeyListener。
  • ContainerEvent :此事件类型表示发生在 GUI 容器中的事件。 此类与用户操作涉及从 GUI 添加或删除对象的任何事件相关联。 这个类的相关监听器是 ContainerListener。
  • MouseEvent :这个类代表所有那些涉及点击或按下鼠标的事件。 此类的侦听器是 MouseListener。
  • WindowEvent :此事件类或类型表示涉及与窗口相关的任何操作的事件。 关闭、激活或停用窗口属于此类。 此类的相关侦听器是 WindowListener。

3. 事件监听器:这些是 Java 的接口,提供了可以在不同实现的类中使用的各种方法。 事件侦听器的工作涉及侦听事件,然后在事件发生时对其进行适当处理。 几乎 Java 中的每个组件都有一个专用的侦听器来处理该组件生成的任何事件。 ActionListener 处理涉及列表、按钮、文本字段和菜单的事件。

4. 事件适配器:如果一个程序提供了太多的抽象方法让监听器覆盖,编译起来会很困难。 例如,如果我们想关闭一个框架,我们需要重写七个 WindowListener 抽象方法。 为了减少复杂性和繁重的编码,Java 有事件适配器。 事件适配器已经是被覆盖的抽象方法。

结论

重要的是要记住多个事件源和侦听器可以相互交互。 因此,属于同一类的多个事件可以由单个侦听器处理。 这意味着一个侦听器可以处理所有涉及执行类似操作的相同组件的事件。 在类似的行中,一个事件可以由多个侦听器处理,前提是程序的设计允许这样做。

说得通?

是的?

不?

与我们联系以了解有关 Java 事件处理的广泛会议。 你不会后悔的!

如果您有兴趣了解有关 Java 用于 Web 开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发 PG 文凭,该文凭专为在职专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目和作业, IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

踏上梦想的工作

升级和 IIIT-BANGALORE 的软件开发 PG 文凭
了解更多