`
lwp2000
  • 浏览: 74168 次
  • 性别: 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 jdk实列宝典 光盘源代码

    2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和透明度Clock.java; 11 java...

    java中的快捷键大全

    java 快捷键导入包:Ctrl+Shift+O 编辑 作用域 功能 快捷键 全局 查找并替换 Ctrl+F 文本编辑器 查找上一个 Ctrl+Shift+K 文本编辑器 查找下一个 Ctrl+K 全局 撤销 Ctrl+Z 全局 复制 Ctrl+C 全局 恢复上一个...

    eclipse快捷键大全

    其中的Generate getters and setters 和 Surround with try/catch block比较常用.建议把它们添加为快捷键.快捷键设置在windows-&gt;preferences-&gt;Workbench-&gt;Keys 2. 快捷键列表 编辑 作用域 功能 快捷键 全局 查找并...

    Java程序设计案例教程-第8章-多线程编程.pptx

    一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。 第8页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第8页。 Java中的线程 Java运行时系统在许多方面依赖于线程,并且所有...

    Eclipse快捷键指南

    全局撤销Ctrl+Z 全局复制Ctrl+C 全局恢复上一个选择Alt+Shift+↓ 全局剪切Ctrl+X 全局快速修正Ctrl1+1 全局内容辅助(代码提示)Alt+/ 全局全部选中Ctrl+A 全局删除Delete 全局上下文信息Alt+? Alt+Shift+? ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    基于Swing和AWT实现的仿windows记事本

    基于Swing和AWT实现的仿windows记事本,完成了大部分功能,除了打印的预览功能和右键菜单功能。添加了恢复撤销的功能,转换当前文本显示的编码功能。(UTF-8,UTF-16,GB2312)。

    Eclipse权威开发指南2.pdf

    3.2.5 导航Java错误和警告..... 81 3.2.6 使用快速修正功能来修改Java错误..... 82 3.2.7 重构..... 83 3.2.8 使用代码模板..... 86 3.2.9 字符串外部化..... 87 3.2.10 生成Javadoc.. 88 3.2.11 在不同的JRE下编写...

    Eclipse权威开发指南3.pdf

    3.2.5 导航Java错误和警告..... 81 3.2.6 使用快速修正功能来修改Java错误..... 82 3.2.7 重构..... 83 3.2.8 使用代码模板..... 86 3.2.9 字符串外部化..... 87 3.2.10 生成Javadoc.. 88 3.2.11 在...

    Eclipse权威开发指南1.pdf

    3.2.5 导航Java错误和警告..... 81 3.2.6 使用快速修正功能来修改Java错误..... 82 3.2.7 重构..... 83 3.2.8 使用代码模板..... 86 3.2.9 字符串外部化..... 87 3.2.10 生成Javadoc.. 88 3.2.11 在...

    Eclipse_Swt_Jface_核心应用_部分19

    第1章 Java语言的GUI历史 2 1.1 最初的AWT 2 1.2 Swing工具包 3 1.3 Eclipse的诞生 3 1.4 Eclipse贡献SWT工具包 5 1.4.1 SWT的结构 6 1.4.2 SWT所支持的操作系统 6 1.5 Sun AWT/Swing与Eclipse SWT 7 ...

    oracle数据库经典题目

    数据库表空间分为系统表空间和非系统表空间两类,其中非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储数据库的数据字典、PL/SQL程序的源代码和解释代码、数据库对象的定义。撤销...

Global site tag (gtag.js) - Google Analytics