`
lwp2000
  • 浏览: 74796 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java文本的撤销和恢复

    博客分类:
  • java
阅读更多

文本的撤销和恢复是通过 addUndoableEditListener(UndoableEditListener listener)这个方法来注册实现的。只要是Document类及其子类都可以注册撤销和恢复的监听来实现文档的撤销和恢复,这是非常容易实现的。所以JTextField,JTextArea,JTextPane都可以实现撤销和恢复功能。因为他们都可以获得Document实例,通过这个方法----getDocument();下面来用实例来讲解一下。

下面的实例是在一个JTextPane中实现撤销和恢复,通过右键弹出菜单来操作。弹出菜单的第一个菜单项是"撤销",第二个是"恢复",第三个是"插入图片"。

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextPane;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.UndoManager;
import com.jijing.tool.SwingConsole;

public class UndoFunction extends JFrame{

    /**
     * @param args
     * 实现简单的撤销功能,并通过Ctrl+Z快捷键来快速操作,这次是在一个文本面板中,既可以写文字又可以插入图片,可以撤销也可以恢复
     * 通过鼠标右键来弹出菜单实现撤销和恢复的操作
     */
    private UndoManager um;//撤销管理类
    private JTextPane jp;//文本面板
    private String name[]={
            "撤销",
            "恢复",
            "插入图片"
    };
    private JPopupMenu pm;//右键弹出菜单类
    private JMenuItem mt[];
    public UndoFunction(){
        um=new UndoManager();
        jp=new JTextPane();
        pm=new JPopupMenu();
        mt=new JMenuItem[3];
        for(int i=0;i<3;++i){
            mt[i]=new JMenuItem(name[i]);
            pm.add(mt[i]);
            mt[i].addActionListener(new PopupAction());
        }
        add(jp);
        jp.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                maybeShowPopup(e);
            }
            public void mouseReleased(MouseEvent e){
                maybeShowPopup(e);
            }
            private void maybeShowPopup(MouseEvent e){
                if(e.isPopupTrigger()){//如果有弹出菜单
                    pm.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });
        jp.getDocument().addUndoableEditListener(new UndoableEditListener(){//注册撤销可编辑监听器
            public void undoableEditHappened(UndoableEditEvent e) {
                um.addEdit(e.getEdit());
            }
           
        });//编辑撤销的监听
    }
    public static void main(String[] args) {
        SwingConsole.swingRun(new UndoFunction(),600,400);
    }
    class PopupAction implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==mt[0]&&um.canUndo()){//撤销
                um.undo();
            }else if(e.getSource()==mt[1]&&um.canRedo()){//恢复
                um.redo();
            }else if(e.getSource()==mt[2]){//插入图片
                ImageIcon icon=new ImageIcon(getClass().getResource("/1.png"));
                jp.insertIcon(icon);
            }
        }
    }
}

其实对于文档编辑的撤销和恢复是非常简单的,只要获取getDocument()就可以实现监听了,在监听方法中添加编辑数据就可以了,

UndoManager .addUndoableEditListener(UndoableEditEvent .getEdit());

在就是在撤销操作中调用UndoManager .undo()就可以了,还有canUndo()这个方法和重要,用于判断undo操作是否成功,如果成功就返回true。

在恢复操作中调用UndoManager .redo()可以实现恢复,还有canRedo()方法判断redo操作是否成功,如果成功返回true。

//下面讲解的是 如果没有提供addUndoableEditListener()方法怎么实现撤销和恢复操作

分享到:
评论

相关推荐

    java文本编辑器

    Java文本编辑器是一种基于Java编程语言开发的软件工具,它允许用户创建、修改和查看文本文件。在Java中实现文本编辑器涉及到多个核心概念和技术,包括Swing或JavaFX图形用户界面(GUI)库,事件处理,文件I/O操作...

    文本编辑器(java)

    这些功能的实现通常需要对文本操作进行记录和管理,以便在需要时恢复或修改文本状态。 总的来说,这个“文本编辑器(java)”项目不仅展示了Java GUI编程的基本原理,还涵盖了文件操作、文本处理、事件驱动编程等多...

    java编写记事本的撤销功能

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

    Java基础课程设计报告(文本编辑器)

    当执行撤销操作时,从栈顶取出状态并恢复。 6. **字体和颜色设置**:用户可能希望改变文本的字体、大小或颜色。Java的Font和Color类可以帮助我们实现这一功能。 7. **自动换行与滚动条**:JTextArea默认支持自动...

    java文本编辑器.rar

    Java文本编辑器是一种基于Java编程语言开发的软件工具,它允许用户创建、修改和查看文本文件。Java作为一种跨平台的编程语言,具有丰富的类库和强大的功能,使得开发者能够构建功能丰富的文本编辑器应用程序,这些...

    Java记事本 基本功能 查找 撤销 替换 字体

    2. **撤销和重做**:撤销和重做功能允许用户撤销最近的操作,如果误操作,可以轻松恢复到之前的状态。在Java中,这通常通过维护一个操作历史栈来实现,每次操作都会将状态推入栈中,撤销时从栈顶取出状态,重做则将...

    java实现单文档文本编辑器

    Java实现的单文档文本编辑器是一款基于Java编程语言开发的简单文本处理工具,它专注于提供基本的文本编辑功能,如创建、打开、保存、复制、粘贴、剪切、查找和替换等。由于其设计为单文档界面(SDI),意味着用户在...

    基于java的文本编辑实现

    这个项目旨在创建一个功能齐全的基于Java的文本编辑器,它不仅提供基本的文本编辑功能,如剪切、复制、粘贴,还包括撤销和重做操作,这些都是现代文本编辑器不可或缺的部分。此外,集成的调试功能使得开发者在编写和...

    FCKeditor for java文本编辑器

    - **撤销/重做**:提供编辑历史记录,便于操作失误后的恢复。 - **拼写检查**:内置拼写检查功能,帮助用户纠正错别字。 ### 4. 自定义与扩展 FCKeditor还允许开发者自定义工具栏,选择显示哪些按钮,以及调整其...

    java, myeclipse工具编写的文本编辑器,实现文本编辑的基本功能

    Java 和 MyEclipse 是开发Java应用程序的常用工具,它们在创建文本编辑器这样的桌面应用时发挥着关键作用。本文将深入探讨如何使用这两者来构建一个具有基本功能的文本编辑器。 首先,Java是一种跨平台的面向对象的...

    和windows一样的java记事本源代码

    通过分析这个Java记事本的源代码,开发者或学习者可以深入了解Java GUI编程,学习如何构建和组织复杂的用户界面,以及如何在Java中实现撤销/恢复功能。此外,这也可能是一个很好的教学实例,帮助初学者理解面向对象...

    java记事本 java记事本

    5. **撤销/重做**:提供撤销和重做功能,让用户可以方便地恢复误操作。 6. **自动换行**:根据窗口大小自动调整文本换行,或者用户可选择开启或关闭。 7. **查找和替换**:帮助用户快速定位特定文本并替换为其他...

    java 记事本 模仿windows记事本功能

    “撤销”和“重做”通常通过Command模式实现,允许撤销和恢复一系列操作;“复制”和“粘贴”则依赖于剪贴板(Clipboard)API,将选中的文本放入系统剪贴板,然后在其他位置取出。 在压缩包文件“note1.0”中,可能...

    java记事本(实现全功能)

    另外,"Java文本编辑器程序设计说明书.doc"文件提供了详细的程序设计指南,涵盖了软件的设计思路、实现步骤、关键代码解释和可能遇到的问题及解决方案。这份说明书对于初学者来说是一份宝贵的资源,有助于理解和复现...

    记事本,复制,粘贴,撤销,全选

    记事本是Windows操作系统中内置的一个简单文本编辑器,它提供了基本的文字输入和编辑功能,如复制、粘贴、撤销和全选等。这些功能在日常工作中极为常见,尤其对于编程人员、文档编辑者和系统管理员来说,是进行文本...

    java 记事本(功能较全面且界面美观)

    Java 编写的记事本程序是一款实用的文本编辑工具,它具有丰富的功能和美观的界面设计,能够满足用户日常的文本处理需求。下面将详细解析这个记事本程序的实现原理和关键知识点。 首先,Java 是一种跨平台的编程语言...

    java编写绘图软件的过程(带程序和代码)

    Java的Font类允许创建和管理字体,Graphics类提供了drawString()方法来显示文本。用户可能需要选择字体类型、大小和颜色,这可以通过下拉菜单、滑块或颜色选择器来实现。 此外,为了保存和加载用户的作品,绘图软件...

    JAVA设计记事本 基本功能全面

    7. 撤销与重做:提供撤销上一步操作和恢复上一步撤销的功能,方便用户修正错误。 8. 字体样式:可能支持更改字体类型、大小、颜色和样式(如粗体、斜体)。 9. 对齐方式:设置文本左对齐、右对齐、居中或两端对齐...

    简易文本编辑器 源码_文本编辑器_简易文本编辑器源码_

    在实际的源码中,开发者可能会选择不同的编程语言(如C++、Java、Python等)和库(如Qt、wxWidgets、Tkinter等)来实现这些功能。通过分析源码,我们可以学习到文件I/O、字符串处理、UI设计、事件处理等多方面的知识...

    java实现记事本源代码

    这个记事本程序可能是用Java Swing或JavaFX库来构建图形用户界面(GUI),提供了基本的文字编辑功能,如打开、保存、复制、粘贴、剪切、撤销和重做等。 Java是面向对象的编程语言,其核心特性包括平台独立性(通过...

Global site tag (gtag.js) - Google Analytics