background image

Java 监控文本框内容的变化

  作为一个跨平台的编程解决方案,Java 显然不能像 Delphi 那样,在用户界面设计方
面提供强大、直观和快捷的设计支持。比如对于文本框的控制,当我们要在程序中感知用
户是否修改了文本框中的内容时,Delphi 提供了一个直接的事件调用 OnValueChanged(),
可以在文本框内容得到实际的改动时被激活。而要在 Java 中实现这一功能就似乎麻烦了一
点,直接的调用只有 keyPressed()和 keyTyped(),前者只对主键盘区(字符、数字等)有反应,
对于

Delete

等功能键没有反应,而后者又似乎反应太过灵敏,对一些不会改变文本框内

容的功能键也积极响应。

那么怎样对 Java 中的文本框设置类似 OnValueChanged()的事件处理呢?这首先取决于我们
所使用的文本框是属于 AWT 类还是 Swing 类。AWT(Abstract Window Toolkit:抽象窗口工
具箱)最初是为了让 Java 具有 UI 设计能力而编写的,但在 1.0 版本中并不被叫好。到了
Java 1.1 版本之后,由于加入了新的事件驱动方法,才真正变得实用、方便和稳定起来。而
Swing 类则是为了应付 AWT 存在的不足,在 Java 1.1 之后推出的一个组件库,由于是建
立在 Bean 的基础上(Swing 的组件是 Bean),所以相对 AWT

而言,它是一个 轻量级 的选

手。Swing

更 自然地 支持更多的面向对象的事件驱动,设计出的 UI 外观可以在不同的平

台上和操作系统上被动态地改变。但在某些场合下,由于其严谨的封装特性,具体实现过
程反而显得较 AWT 类要冗长一点。显然,如果不考虑对老代码的继续使用,Swing 类应
该是设计 UI 的首选。
使用 AWT 类
对于 AWT 中的 TextField 类,实现监控的关键是对 TextListener 的使用。TextListener 的声明
如下:

interface

 TextListener 

extends

 EventListener

它在 java.awt.event 包中被定义。这个接口是提供给用户用以监听文本内容的变化的。它所
包含的方法是 textValueChanged(),完整的声明如下:

public

 void textValueChanged(TextEvent e) {}

当一个对象中的文本内容发生变化时,就会触发该事件,并执行该方法中所指定的语句。
要注意的是:TextListener 是一个接口(

interface

),必须先定义一个新类来执行(

implements

)

它。本文所定义的新类名为 AWT_OnValueChanged。
在窗体的说明语句中,为 TextField 增加一个 TextListener 事件(本文给出的 TextField 对象
名为 textField1):
textField1.addTextListener(

new

AWT_OnValueChanged());
最后对 textValueChanged()事件进行重载:

public

 void textValueChanged(TextEvent e)

{

//写入实际代码,实现所需功能

 
……
}