网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  使用java来实现编辑器的undo redo功能     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:75次  录入:管理员--2007-11-16  
 

用java实现编辑器的undo redo功能,非常的方便,下面是一个实现这个功能的类,

import java.awt.event.actionevent;
import javax.swing.abstractaction;
import javax.swing.action;
import javax.swing.jeditorpane;
import javax.swing.keystroke;
import javax.swing.event.undoableeditevent;
import javax.swing.event.undoableeditlistener;
import javax.swing.text.jtextcomponent;
import javax.swing.undo.cannotredoexception;
import javax.swing.undo.cannotundoexception;
import javax.swing.undo.undomanager;

/**
 * undowrapper is responsible for adding undo and redo support to text components.
 * @author antonio vieiro (antonio@antonioshome.net), $author: $
 * @version $revision: $
 */
public class undowrapper
  implements undoableeditlistener
{
  private undomanager undomanager;
  private undoaction undoaction;
  private redoaction redoaction;
  private jeditorpane textcomponent;
    
  /**
   * creates a new instance of undowrapper
   */
  public undowrapper( jeditorpane acomponent )
  {
    textcomponent = acomponent;
    undomanager = new undomanager();
    undoaction = new undoaction();
    redoaction = new redoaction();
    textcomponent.getdocument().addundoableeditlistener( this );
    textcomponent.getinputmap().put( (keystroke) undoaction.getvalue( 
action.accelerator_key), "undo" );
    textcomponent.getinputmap().put( (keystroke) redoaction.getvalue( 
action.accelerator_key), "redo" );
    textcomponent.getactionmap().put( "undo", undoaction );
    textcomponent.getactionmap().put( "redo", redoaction );
  }
  
  public void undoableedithappened(undoableeditevent e)
  {
    undomanager.addedit( e.getedit() );
    undoaction.updateundostate();
    redoaction.updateredostate();
  }
  
  /**
   * undoaction is the action responsible for handling the undo operation.
   */
  class undoaction
    extends abstractaction
  {
    public undoaction()
    {
      super( "cannot undo" ); // todo: i18n
      setenabled( false );
      putvalue( action.accelerator_key, keystroke.getkeystroke("ctrl z") );
    }
    
    public void actionperformed(actionevent e)
    {
      try
      {
        undomanager.undo();
      }
      catch( cannotundoexception cue )
      {
        // todo: use logging?
        cue.printstacktrace( system.err );
      }
      updateundostate();
      redoaction.updateredostate();
    }
    
    void updateundostate()
    {
      if ( undomanager.canundo() )
      {
        setenabled( true );
        putvalue( action.name, "undo" ); // todo i18n
      }
      else
      {
        setenabled( false );
        putvalue( action.name, "cannot undo" );  // todo i18n
      }
    }
  }
  
  /**
   * redoaction is the action responsible for handling the redo operation.
   */
  class redoaction
    extends abstractaction
  {
    public redoaction()
    {
      super( "cannot redo" );  // todo i18n
      setenabled( false );
      putvalue( action.accelerator_key, keystroke.getkeystroke("ctrl y") );
    }
    public void actionperformed(actionevent e)
    {
      try
      {
        undomanager.redo();
      }
      catch( cannotredoexception cre )
      {
        // todo: use logging?
        cre.printstacktrace( system.err );
      }
      updateredostate();
      undoaction.updateundostate();
    }
    
    void updateredostate()
    {
      if ( undomanager.canredo() )
      {
        setenabled( true );
        putvalue( action.name, "redo" );  // todo i18n
      }
      else
      {
        setenabled( false );
        putvalue( action.name, "cannot redo" );  // todo i18n
      }
    }
  }
  
  undoaction getundoaction()
  {
    return undoaction;
  }
  
  redoaction getredoaction()
  {
    return redoaction;
  }
}

使用的时候,只需要将你创建的jeditorpane作为对象传入undowrapper中即可。使用方式如下

new undowrapper(editorpane);

ok这样你的编辑器就具有了undo redo功能,而且是次数不收限制的。

 
 
上一篇: 使用java程序实现随机验证码功能的实例    下一篇: 新手入门:对j2ee初学者的学习流程介绍
  相关文档
关于java servlet编程应用基础分析 11-17
Java打印程序设计全攻略 08-06
java基础知识(1) 11-17
混合eclipse、wtp、struts和hibernate 11-17
java使用技巧:探讨jar文件无限可能性 11-16
从数据库读出的jpg文件的字符流,转换成图片显示在页面上的相关? 11-17
开源面向对象数据库db4o之旅:初识db4o 11-17
java学习从入门到精通 4方法篇 11-16
java的build工具—ant应用指南(3) 11-17
怎样利用hibernate开发blog实例分析 11-17
全面研读ejb 2.0(2) 11-17
java写的查找重复电话号码程序 11-16
compass 0.5, java 搜索引擎框架发布 11-17
针对hibernate,jdbc,sql的思考 11-17
将 java 代码与 jsp 组件分离 11-17
在weblogic上配置hibernate为jndi 11-16
准备scjp的时候做的一些笔记 11-17
java 词汇表速查手册(附:j2ee相关名次解释) 11-17
深入理解struts 1.1及应用开发实例解析 11-17
java se 6在solaris的可观察性特征分析 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息