`
JAVA天地
  • 浏览: 674257 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

实现编辑器的Undo Redo功能用Java来

阅读更多

转自:http://blog.csdn.net/dongliheng/archive/2007/08/09/1733146.aspx

用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 编辑器Undo Redo

    实现Java中编辑器的Undo、Redo操作,功能比较强大

    java代码实现文本编辑器

    Java作为一种广泛使用的编程语言,具有丰富的库和框架,使得用Java实现Web文本编辑器成为可能。在这个项目中,我们将探讨如何利用Java技术栈来创建一个网页内的文本编辑器,并通过引入JavaScript来增强用户体验。 ...

    Java实现简单的文本编辑器

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个简单的文本编辑器。这个文本编辑器将具备基本的文本操作功能,如打开、保存、复制、粘贴、撤销和重做等。首先,我们需要理解Java的基本语法和面向对象编程...

    基于Java的文本编辑器.zip

    《基于Java的文本编辑器开发详解》 在IT领域,编程语言Java因其强大的跨平台性和丰富的库支持,常被用于开发各种类型的应用程序,其中包括文本编辑器。本篇将深入探讨一个基于Java实现的文本编辑器的设计与实现,...

    javascript 实现的编辑器

    JavaScript实现的编辑器在Web开发中扮演着至关重要的角色,特别是在Java Web开发中。这种编辑器通常被用作用户输入、代码编辑或者富文本处理的工具。JavaScript的强大在于它的跨平台性和灵活性,使得开发者能够创建...

    java写的文本编辑器

    Java编写的文本编辑器是一种基于Java编程语言实现的软件,用于创建、查看和编辑纯文本文件。这种文本编辑器通常不包含复杂的格式化选项,而是专注于基础的文字输入和编辑功能,适合程序员或需要进行源代码编辑的用户...

    文本编辑器 源代码 java

    标题 "文本编辑器 源代码 java" 暗示我们关注的是一个使用Java编程语言开发的文本编辑器项目。这个项目可能包含了实现文本编辑功能的各种核心组件和算法,例如打开、保存、编辑、查找替换等操作。在Java中,这通常会...

    java如何在绘图板上实现undo(撤销操作).docx

    在Java编程中,实现撤销(Undo)操作是增强应用程序用户体验的重要功能,特别是在涉及用户交互和图形编辑的应用中。Swing库提供了一套完整的框架来帮助开发者轻松实现这一特性。主要涉及的类和接口位于`javax.swing....

    java-Editor.zip_java editor_括号匹配 的JAVA 实现

    在Java编辑器中,这通常通过解析代码并应用适当的样式来实现,比如使用正则表达式或词法分析器。 括号匹配是另一个关键功能。在编程时,正确配对的括号是至关重要的,而括号匹配功能能帮助开发者检查一对括号是否...

    文本编辑器.zip

    5. ** undo/redo 功能**: 要实现撤销/重做功能,可以使用java.util.Stack来存储历史操作,每次进行修改时将旧状态推入栈中,当用户执行undo时弹出栈顶元素恢复状态。 6. **查找和替换**: 实现查找和替换功能,可以...

    基于java的文本编辑实现

    在Java编程环境中,实现一个文本编辑器是一项挑战性但实用的任务。这个项目旨在创建一个功能齐全的基于Java的文本编辑器,它不仅提供基本的文本编辑功能,如剪切、复制、粘贴,还包括撤销和重做操作,这些都是现代...

    一套功能强大,可取代记事本的文字编辑器editplus3

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    editplus3编辑器及其key

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    EditPlus最著名文本编辑器之一(程序员专用)

    EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本、HTML和程序语言的32位编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。 首先,EditPlus是...

    EditPlus_3.30.514_SC EditPlus(文字编辑器)3.30.514

    它拥有无限制的Undo/Redo功能,让你不再为一步误操作而后悔不已;其强劲的英文拼字检查、自动换行、列数标记、语法高亮显示、垂直选择、搜寻功能,让你全面体验记事本所没有的超强功能;它可以同时编辑多种文件类型...

    undo-redo-stack:撤消重做堆栈

    撤消重做堆栈是软件开发中一个非常重要的设计模式,尤其在文本编辑器、图形设计工具、数据库管理系统等需要用户交互并可能频繁修改数据的环境中。它允许用户撤销最近的操作,如果用户发现之前的改动不理想,还可以...

    java记事本设计与实现(仿照window提供的记事本软件)

    在本文中,我们将深入探讨如何使用Java编程语言设计并实现一个仿照Windows记事本的文本编辑器。这个项目旨在帮助开发者理解GUI(图形用户界面)编程、事件处理以及文件I/O操作等核心Java概念。 首先,我们需要创建...

    java编写记事本的撤销功能

    在Java编程中,实现记事本的撤销功能是一项常见的任务,它涉及到文本编辑器的核心功能。撤销功能允许用户取消最近的操作,恢复到之前的状态。在本文中,我们将深入探讨如何在Java中构建这样的功能,主要关注`frame`...

    记事本编辑器EditPlus 3

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    文字编辑器(EditPlus) 3.31.1279汉化绿色版

    它拥有无限制的Undo/Redo功能,让你不再为一步误操作而后悔不已;其强劲的英文拼字检查、自动换行、列数标记、语法高亮显示、垂直选择、搜寻功能,让你全面体验记事本所没有的超强功能;它可以同时编辑多种文件类型...

Global site tag (gtag.js) - Google Analytics