java文本的撤销和恢复

java:实现撤销与重做(附完整源码) 阅读详情

搬家后的博客链接: IT客栈 www.itkezhan.org


文本的撤销和恢复是通过 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 记事本(新建,打开,复制,撤销,粘贴,字体设置) 文件包含一个可执行程序,一个工程文件。开发环境是myeclipse。本程序实现的是和windows自带的记事本一样功能和外观的Java程序。 立即下载

相关推荐

java编写记事本的撤销功能

本资源含有一个用java写好的记事本,主要是针对frame中的undo功能。

eclipse中误删除的java文件 代码如何恢复

误删除文件的恢复在用eclipse进行代码编写操作时,有时会误删除文件或者文件包。通过eclipse的恢复文件功能可以恢复误删除的文件。具体步骤为:1、选择误删除文件在eclipse所在包(文件夹)2、在包上单击右键。3、选择restore from local history...4、在弹出的对话框中选择需要恢复的文件具体如图:选择需要恢复的文件代码的恢复、比较1、选择要修改比较的代码片段2、单...

信息安全领域优质创作者|操作系统领域专家 1万+

java 记事本(简单的功能)

java 记事本,实现记事本的简单功能,基本操作

java记事本实现转到和撤销功能

本文是对java记事本转到和撤销功能的实现

m0_62068664的博客 573

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

该记事本由java编写。功能全面,包含撤销,删除,剪切、复制粘贴、查找与替换,自动换行,字体选择等等。且界面与原版笔记本有很高的相似度。

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

用Java开发的简易记事本,功能包括基本的复制、粘贴、剪切、撤销、重做、替换、查找、字体、字数统计及文件基本操作。可供学习使用

Java应用技巧——文本撤销、恢复功能的实现

作文本编辑器的时候,撤销(undo)、恢复(redo)是必不可少的两个功能。实现这个功能,要用到javax.swing.undo包中的UndoManager类。 UndoManager类有如下常用方法: boolean canUndo()  ——判断能否进行撤消操作,可以则返回true。boolean canRedo()  ——判断能否进行恢复操作,可以则返回true。vo

Deepen Deeper! 1万+

icem二维非结构网格划分_ICEM CFD网格装配

正文共:718字7图 预计阅读时间:2分钟1 前言 对于一些大型的复杂的网格划分,可以将整个模型切分成多个子模型(二维几何用线切分,三维模型用面切分),然后对各个模型单独划分网格,最终装配在一起。这和机械设计的零件设计和装配设计有点相似,这个功...

weixin_39908758的博客 1625

java 撤销恢复按钮_java文本的撤销和恢复

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

weixin_39946460的博客 1561

科研级实战】YOLOv11 pose部署至RK3588全流程:让姿态估计模型在边缘端毫秒级运行,我来帮你突破人体行为分析落地壁垒

在智慧安防人体行为分析场景中,基于YOLOv11 pose的模型在云端推理单帧耗时150ms,硬件成本超15000元;经本方案部署到RK3588后,单帧推理耗时降至30ms,硬件成本仅4000元,且关键点检测准确率高达93%以上。在运动姿态评估场景,同款技术路径使模型边缘端推理速度提升6倍,姿态分类精度达95%。这意味着,你也能让自己的姿态估计模型在边缘设备上实现的工业化落地,接下来让我们开启从模型训练到端侧部署的实战征程。

m0_71589036的博客 223

5.3-集群电源模式解析

DSU-120 DynamIQ™集群支持9种电源模式,包括正常运行(ON)、完全断电(OFF)、三种数据保持模式(FUNC_RET、FULL_RET、MEM_RET)、两种调试模拟模式(OFF_EMU、MEM_RET_EMU),以及系统恢复模式(WARM_RST、DBG_RECOV)。这些模式通过智能管理电源状态,在保持数据完整性的同时实现功耗优化,并为系统调试和故障恢复提供支持。不同模式在RAM保持、逻辑断电和调试能力方面各有侧重,满足从正常运行到深度调试等不同场景需求。

baron-周贺贺-代码改变世界ctw 117

java撤销一步,Java应用技巧——文本撤销、恢复功能的实现

作文本编辑器的时候,撤销(undo)、恢复(redo)是必不可少的两个功能。实现这个功能,要用到javax.swing.undo包中的UndoManager类。UndoManager类有如下常用方法:boolean canUndo() ——判断能否进行撤消操作,可以则返回true。boolean canRedo() ——判断能否进行恢复操作,可以则返回true。void Undo() ——进...

weixin_42519161的博客 2405

2026最新华为OD机试新系统机考真题- 真题题库目录|全覆盖题库 + 逐点算法考点详解

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 2585

java文本之撤销与恢复

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

软通大学企业博客 8235

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1587

第八届传智杯微信小程序开发挑战赛练习题库

本文是微信小程序开发练习题库,包含单选题、多选题和判断题三种题型。单选题主要考察小程序开发基础知识,如数组方法、组件使用、API调用等;多选题涵盖样式属性、页面跳转、数据处理等综合知识;判断题则测试开发者对小程序特性、生命周期、功能限制等概念的理解。题目内容涉及小程序开发的各个方面,包括组件使用、API调用、数据绑定、页面配置等核心知识点,适合开发者进行自我测试和知识巩固。

qq_73044452的博客 505

java实现文件操作撤销功能吗_java swing下怎么实现恢复撤销功能?(不是文本编辑)而是类似photoshop这种...

我需要实现一个完成恢复撤销功能的通用模块,这个项目主要是是基于swing下的图面界面开发,也就是回到上一步以及到下一步。我的思路是将当前的panel面板当做一个对象对其进行深拷贝pu...我需要实现一个完成恢复撤销功能的通用模块,这个项目主要是是基于swing下的图面界面开发,也就是回到上一步以及到下一步。我的思路是将当前的panel面板当做一个对象对其进行深拷贝public static Obj...

weixin_35642839的博客 264

【科学文献计量】标准参考出版年谱(Standard RPYS)和多维参考出版年谱(Multi RPYS)

@[TOC](标准参考出版年谱(Standard RPYS)和多维参考出版年谱(Multi RPYS)) 1 标准参考出版年谱与多维参考出版年谱 1.1 标准参考出版年谱(Standard RPYS) 标准参考出版年谱(Standard Reference Publication Year Spectroscopy)是由Marx, Bornmann, Barth, and Leydesdorff(2014)和Marx and Bornmann(2014)提出的一种量化历史出版物对研究领域影响的方法。该方法通

lys_828的博客 1103

备忘录模式:实现对象状态撤销与恢复的设计模式

/ 编辑内容// 创建备忘录(保存当前状态)// 恢复状态(从备忘录中读取)// 修改内容(模拟编辑操作)= null?// 获取当前内容// 包可见方法,仅同一包内的原发器可调用// 添加新备忘录到历史记录// 获取指定版本的备忘录(索引从 0 开始)适用场景核心特征典型案例撤销 / 重做功能需要记录对象状态变化,支持回滚文本编辑器、绘图软件状态备份与恢复定期保存状态快照,支持故障恢复游戏存档、数据库备份版本控制需要管理对象的多个历史版本。

無言的博客 947

扣子(Coze)搭建智能体完整实战指南 —— 从零基础入门到写小说及其他需求扩展开发

随着大语言模型进入应用爆发期,我们正在经历从“寻找提示词”向“构建智能体”的范式转移。扣子(Coze)作为字节跳动推出的一站式AI智能体开发与运营平台,极大地降低了AI应用开发的门槛,让非技术人员也能快速搭建具备感知、决策、行动能力的智能体。 本文将手把手带你从零开始,在扣子平台上搭建一个功能完备的**小说创作智能体**,并基于此展示如何将同一套架构扩展到其他需求场景。无论你是写作爱好者、内容创作者,还是希望用AI赋能日常工作的职场人士,这套完整的技术方案都将帮助你快速上手。

huanghm88的专栏 638

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JAVA大作业(1)文本编辑器

<JAVA - 大作业(1)文本编辑器 > 背景 JAVA上机大作业:qq / 代码评价系统 第一次上机主题是练习JAVA自带的GUI图形化编程 目的:实现一个跟window10记事本界面相同,功能相近的文本编辑器,时间有剩余的话再添加类似notepad++上的一些额外功能。 记事本结构 标题栏 显示标题title 菜单栏 文件、编辑、格式、查看、帮助 - 菜单...

kg150520的博客 1598

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java怎么撤销_如何用Java 在记事本中实现撤销与恢復??请高手赐教。。我要关键部分的代码。。最好具体点。加分不是问题...

else if (e.getSource() == me1 || e.getSource() == bt_undo|| e.getSource() == popupMenu_Undo) {//撤销tex.requestFocusInWindow();if (undo.canUndo())try {undo.undo();me12.setEnabled(true);//撤销回复} catch (Ca...

weixin_26765363的博客 489

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java Swing 支持 撤销和恢复功能 ctrl+z ctrl+y

package com.citi.wws.backup; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent;

qihuitoday的专栏 3619

JEditorPane插入很多字符和撤销 恢复操作

JEditorPane插入很多字符和撤销 恢复操作,  下面是代码,  NewFrame类中 调用 UndoWrapper类import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.

tingxiao2177的专栏 1972

java记事本中恢复类_如何用Java 在记事本中实现撤销与恢復??请高手赐教。。我要关键部分的代码。。最好具体点。加分不是问题...

else if (e.getSource() == me1 || e.getSource() == bt_undo|| e.getSource() == popupMenu_Undo) {//撤销tex.requestFocusInWindow();if (undo.canUndo())try {undo.undo();me12.setEnabled(true);//撤销回复} catch (Ca...

weixin_36124631的博客 218
上一篇: 常用字符集分类
下一篇: 关于java的io一个需要注意的问题
failure01
博客等级 码龄15年 18粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值