论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
在Java中监控文本框的变化
 作者:佚名     2007-3-14 17:30:19        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

作为一个跨平台的编程解决方案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)

  {

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

……

  }

使用Swing类

  对于Swing中的JTextField类,实现监控的过程则相对复杂一些。JTextField中没有设置TextListener,而是将对文本的监视任务放入了另外一个接口Document中。因此首先要为JTextField对象申请一个Document接口对象,使用的方法是JTextField1.getDocument()(本文给出的JTextField对象名为JTextField1)。获得Document后,就可以使用addDocumentListener()来得到一个和TextListener功能类似的监听接口。DocumentListener的完整声明如下:

  interface DocumentListener extends EventListener

  它在包java.swing.event.DocumentListener中定义,其中包含了三个方法:

  public void changedUpdate(DocumentEvent e):监听文本属性的变化;

  public void insertUpdate(DocumentEvent e):监听文本内容的插入事件;

  public void removeUpdate(DocumentEvent e):监听文本内容的删除事件。

  和处理TextField组件一样,定义新类(本文为Swing_OnValueChanged)、加入说明、编写代码后,就可以实现所需功能了。

编程实现

  下面给出实现监控功能的关键部分的Java代码。完整代码编译后在Java虚拟机上运行,界面如图1所示:


  图1


  在两个编辑框中或输入或删除或选中后修改,只要文本框中的内容得到了确切的改变,就会触发相应的事件,从而产生输出(在字符界面上)。

  public class JFrame1 extends JFrame

  {

   public JFrame1()

   { //生成图形界面

    ……

   //对Exit按钮的事件定义

    btnAction exitAction = new btnAction();

    JButton1.addActionListener(exitAction);

    //定义TextField组件的文本监听

textField1.addTextListener(new AWT_OnValue

Changed());

    //定义JTextField组件的文本监听

  JTextField1.getDocument().addDocumentListener

(new Swing_OnValueChanged ());

   }

 //根据接口TextListener定义新AWT_OnValue

Changed

   class AWT_OnValueChanged implements TextListener

   {

    public void textValueChanged(TextEvent e)

    { //输出变化及结果

     System.out.println(“Text Changed:”+textField1.getText());

    }

   }

  //根据接口DocumentListener定义新类Swing_OnValueChanged

   class Swing_OnValueChanged implements DocumentListener

   { //输出变化及结果

    public void changedUpdate(DocumentEvent e)    {

     System.out.println(“Attribute Changed”+e);

    }

    public void insertUpdate(DocumentEvent e)

    { //输出变化及结果

  System.out.println(“Text Inserted:”+textField1.getText());

    }

    public void removeUpdate(DocumentEvent e)

    { //输出变化及结果

  System.out.println(“Text Removed:”+textField1.getText());

    }

   }

   //定义新类,实现Exit按钮的时间监听

   class btnAction implements ActionListener

   { //接收事件

    public void actionPerformed(ActionEvent event)

    {

     Object object = event.getSource();

     if (object == JButton1)

      JButton1_actionPerformed(event);

    }

   }

   //Exit按钮事件

void JButton1_actionPerformed(java.awt.event.

ActionEvent event)

   {//退出程序

    System.exit(0);

   }

  }

小 结

  实际上,除了文本框(TextField和JTextField),只要是文本编辑区,包括TextArea、JTextArea、JTextPane等,都可以利用上述的方法来实现OnValueChanged()事件,以实现对文本区域内容的监控。

  以上代码在JDK 1.2环境下编译通过。


责任编辑:lss
  相关新闻
JSFToolbox--用Dreamweaver开发JSF
Java模板引擎Velocity基本语法
【JAVA基础】JDBC连接DB2数据库详解
为什么要学习Java,成为Java程序员
Java基础-漫谈EJB在Java中的应用
漫谈EJB在Java中的应用(二)
J2EE技术-漫谈EJB在Java中的应用
JAVA测试:使用JMock来实现孤立测试
看看如何在Struts应用中施展AJAX魔法
通过java.net.Socket类抓取网页内容
为什么要学习Java,成为Java程序员
Java基础-漫谈EJB在Java中的应用
漫谈EJB在Java中的应用(二)
运用Jakarta Struts的七大实战心法
通过Java Swing 看透MVC设计模式
开发保留标准浏览器功能的AJAX应用程序
Web框架趣谈之Java Web 框架的甜点
Web2.0时代的核心应用:Ajax简介
精华:AJAX开发简略(第一部分)
Thinking in AJAX(三)——AJAX框架汇总
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号