`
helpbs
  • 浏览: 1164009 次
文章分类
社区版块
存档分类
最新评论

Swing组件集合的事件处理(一)

 
阅读更多

在本章中,我们将会详细了解使用Swing组件的一个方面:事件处理。当使用Swing组件集合时,我们可以使用基于委托的事件处理机制,但是我们也可以使用其他的方法来响应用户的动作。在本章中,我们将会探索所有这些事件处理响应机制。我们同时也会了解到Swing是如何管理输入焦点以及控制输入焦点处理的相关技术。

当我们探索事件处理功能时,我们将会开始了解一些实际的Swing组件。在本章中,我们将会以最简单的方式来使用Swing组件。我们可以先阅读本书后面章节中所探讨的组件,然后再回到本章探讨事件处理。本书的后面章节中也包含每一个组件特定的事件处理的详细内容。

2.1 基于委托的事件处理

Sun在JDK.1.1及JavaBean的Java库中引入了基于委托的事件处理机制。尽管Java 1.0库中包含了遵循观察者行为设计模式的对象观察者对,但这并不是用户界面编程的长久解决方案。

2.1.1 事件委托模型

基于委托的事件处理机制是观察者设计模式的一种特殊形式。当一个观察者希望希望一个被监视的对象状态何时发生变化以及状态变化是什么时可以使用观察者模式。在基于委托的事件处理机制中,观察者并不监听状态改变,而是监听事件发生。

图2-1显示了在Java库中与事件处理的特定类相关的修改后的观察者模式结构。模式中的通用Subject管理一个用于Subject可以生成的事件的通用观察者对象列表。列表中的观察者对象必须提供一个特定的接口,通过这个接口Subject参与者可以通知他们。当观察者对象所感兴趣的事件在Subject参与者中发生时,所有已注册的观察者对象都会被通知到。在Java世界中,观察者对象要实现的接口必须扩展java.util.EventListener接口。Subject参与者必须创建的事件需要扩展java.util.EventObject类。

swing_2_1

为了使得讨论更为清晰,下面我们由非设计模式的角度来了解基于委托的事件处理机制。GUI组件(JavaBean)管理一个监听器列表,每一个监听器会有用于监听器类型的一对方法:addXXXListener()与removeXXXListener()。当组件中有事件发生时,组件会通知所有注册的事件监听器。任何对该事件感兴趣的观察者类需要向组件注册一个相应接口的实现器。当事件发生时,所有的实现都被通知。图2-2尝过了这个过程。

swing_2_2

2.1.2 作为观察者的事件监听器

使用事件监听器来处理事件分为三步:

  1. 定义一个类来实现相应的监听器接口(这包括为所有的接口方法提供实现)。
  2. 创建这个监听器的一个实例。
  3. 将监听器注册到我们所感兴趣的的事件的组件上。

下面我们通过创建一个简单的通过输出消息来响应选择的按钮来了解一下这三个特定步骤。

定义监听器

要为了一个可选择的按钮设置事件处理,我们需要创建一个ActionListener,因为JButton在被选中时会生成ActionEvent对象。

class

 AnActionListener implements ActionListener {
  public

 void

 actionPerformed(ActionEvent actionEvent) {
    System.out

.println("I was selected.

");
  }
}

创建监听器实例

接下来我们简单的创建一个我们所定义的监听器的实例。

ActionListener actionListener = new

 AnActionListener();


如果我们为事件监听器使用匿名内联类,我们就可以组合步骤1与2:

ActionListener actionListener = new

 ActionListener() {
  public

 void

 actionPerformed(ActionEvent actionEvent) {
    System.out.println("I was selected.

");
  }
};

向组件注册监听器

一旦我们创建了监听器,我们就可以将其与相应的组件相关联。假定我们已经创建JButton,并将其引用存入在变量button中,我们可以通过调用按钮的addActionListener()方法来实现:

button.addActionListener(actionListener);

如果我们当前所定义的类就是实现监听器接口的类,那么我们就不需要创建一个单独的监听器实例。我们只需要将作为监听器的类与组件相关联。如下面的示例代码所示:

public

 class

 YourClass implements

 ActionListener {
  ... // Other code for your class


  public

 void

 actionPerformed(ActionEvent actionEvent) {
    System.out.println("I was selected.

");
  }
  // Code within some method


   JButton button = new

 JButton(...);
   button.addActionListener(this

);
  // More code within some method


}

以如上所示创建监听器并将其与组件相关联的方法使用事件处理器是响应Swing组件事件的基本方法。哪一个监听器与哪一个组件配合使用将会在后面的章节中描述相应的组件时进行讨论。在下面的内容中,我们将会了解到响应事件的一些其他方法。

分享到:
评论

相关推荐

    Java Swing'组件集合

    关于swing组件的集合,刚刚接触这些的朋友看看,对swing组件有些了解

    经典Swing事例集合

    很多Swing经典事例,包扩各种组件、容器例子

    RComponent.Swing

    RComponent.Swing是RComponent为java开发人员提供的表现层Swing组件集合,100%java实现。提供完整的API,帮助文档。 丰富的Demo和Demo源码。提供免费技术支持。 1.RDatePicker 输入日期数据。 2.RIpAddressField ...

    JAVA教学(关于swing的使用)

    Swing是AWT的扩展,它提供了更强大和更灵活的组件集合。 除了我们已经熟悉的组件如按钮、 复选框和标签外, Swing还包括许多新的组件, 如选项板、 滚动窗口、树、表格。许多一些开发人员已经熟悉的组件,如按钮,在...

    swing-js:轻量级JavaScript组件的集合

    Swing.js是一个轻量级的javascript组件集合,可帮助减少对肿的第三方库的需求。 它的主要目标是: 尽可能减小文件大小。 允许独立加载组件(仅加载所需的组件)。 允许以任何顺序加载组件。 支持所有现代浏览器...

    JAVA Swing 全教程

    Swing包含250多个类,是组件和支持类的集合。Swing提供了40多个组件,是AWT组件的四倍。除提供替代AWT重量组件的轻量组件外,Swing还提供了大量有助于开发图形用户界面的附加组件。

    swing-material:Swing的材料设计组件和实用程序的集合

    摇摆材料Swing的材料设计组件和实用程序的集合。

    Java 界面组件案例集合 众多DEMO

    Java 界面组件案例集合 众多DEMO 适合新手和想学习java 界面开发的朋友使用

    基于集合的学生信息管理系统(含GUI)JAVA版

    是基于集合的学生信息管理系统,因此在批量处理信息时采用集合类对象来储存,本题采用的是ArrayList。 该系统有三大功能,分别是管理员、老师、学生。 管理员除了要实现自己的登录、查看个人信息和修改教师密码以外...

    AWT基础知识

    2. 事件处理模型 3. 图形图像工具(形状、颜色、字体) 4. 布局管理器 AWT的优势: 1. 最早的JAVA GUI包,内嵌到JDK中,无需引入其他类,功能稳定 2. AWT组件都是线程安全的 3. 界面编程基础. 学会AWT, 很容易去学...

    Java综合实验---学生信息管理系统

    编写一个程序,综合运用集合、IO流等相关操作,编程实现以下要求: 1) 定义一个父类,并定义多个不同子类,子类分别以不同方式重写父类的方法; 2) 定义多个类型的对象,编写方法实现多态效果; 3) 将多个对象存放在...

    OpenSwing---Java 常用控件集合

    对几乎所有的组件全部加入了JavaBeans处理, 使OpenSwing支持可视开发. 2005/04/17 将JNumberField最大长度,小数位长度修正成符合数据库定义的规范,如:NUMBER(10,2) 2005/04/21 修改了JNumberField的参数方式及不能...

    javaswing程序源码-java-book:《Java编程:综合入门》一书的源代码

    编程进行概述,阐述组件、事件、布局管理器的基本概念,然后依次对 Swing 组件、菜单、对话框、绘图等进行介绍。 第三部分(第22~27章)探究 Java API 库的部分内容,其中包括 java.lang 包和 java.util 包的大部分...

    Java项目实训+推箱子游戏2023版

    3.Swing组件的灵活应用; 4.IO流的应用,读取地图文件,解析地图内容; 5.音频文件的播放,实训播放背景音乐功能; 6.java事件的应用,如ActionListener,ItemListener等事件; 7.内部类的应用。 8.绘图功能的的灵活...

    j2sePPT教案与事例

    包括OOP概述、java语言概述、JAVA编程基础、类和对象、类的高级特性6、字符与字符串7、数组8、断言9、异常和垃圾收集10、内部类11、反射12、gui编程13、swing结构与布局管理器14、AWT事件模型15、swing用户界面组件...

    个人简易版坦克大战,能保存数据,但没音效

    java基础,使用一些Swing组件,线程,集合

    java 核心技术卷一 光盘 资料

    这是一个txt文件,迅雷下载地址,复制,新建,下载就可以了 ...第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    JAVA_API1.6文档(中文)

    javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 ...

    java从入门到精通视频教程(全94讲)学习笔记整理(齐全).docx

    坦克大战,简易QQ界面......P1第1讲-内容介绍....-事件处理.坦克大战3 -事件监听.坦克大战4 -事件总结.坦克大战5 -线程.坦克大战6 -线程.坦克大战7 -线程 -坦克大战8 -坦克大战9 -io编程.坦克大战10 -io编程

    tomproject:有用的Java组件和算法的集合

    这些算法包括桌面应用程序内存管理器,Swing实用程序,Swing接口转换以及许多Swing的组件扩展。 TomProject最初将提供葡萄牙语和英语组件界面。 TomProject的一些功能: TomFrame提供了已配置的框架以供一般使用...

Global site tag (gtag.js) - Google Analytics