文本的撤销和恢复是通过 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()方法怎么实现撤销和恢复操作
分享到:
相关推荐
内含程序代码和课程设计总结...编辑文档可实现撤销、恢复、复制、粘贴、剪切、全选、删除、查找、替换等操作;有自动换行功能,具有字体设置,还可以设置背景色,可以查看状态栏,有鼠标右键,特色是有美观的登录界面
2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和透明度Clock.java; 11 java...
java 快捷键导入包:Ctrl+Shift+O 编辑 作用域 功能 快捷键 全局 查找并替换 Ctrl+F 文本编辑器 查找上一个 Ctrl+Shift+K 文本编辑器 查找下一个 Ctrl+K 全局 撤销 Ctrl+Z 全局 复制 Ctrl+C 全局 恢复上一个...
其中的Generate getters and setters 和 Surround with try/catch block比较常用.建议把它们添加为快捷键.快捷键设置在windows->preferences->Workbench->Keys 2. 快捷键列表 编辑 作用域 功能 快捷键 全局 查找并...
一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。 第8页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第8页。 Java中的线程 Java运行时系统在许多方面依赖于线程,并且所有...
全局撤销Ctrl+Z 全局复制Ctrl+C 全局恢复上一个选择Alt+Shift+↓ 全局剪切Ctrl+X 全局快速修正Ctrl1+1 全局内容辅助(代码提示)Alt+/ 全局全部选中Ctrl+A 全局删除Delete 全局上下文信息Alt+? Alt+Shift+? ...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
基于Swing和AWT实现的仿windows记事本,完成了大部分功能,除了打印的预览功能和右键菜单功能。添加了恢复撤销的功能,转换当前文本显示的编码功能。(UTF-8,UTF-16,GB2312)。
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下编写...
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 在...
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 在...
第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 ...
数据库表空间分为系统表空间和非系统表空间两类,其中非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储数据库的数据字典、PL/SQL程序的源代码和解释代码、数据库对象的定义。撤销...