java文本的撤销和恢复
来源:互联网 发布:java新技术 2017 编辑:程序博客网 时间:2024/05/17 23:55
搬家后的博客链接: 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文本的撤销和恢复
- java文本之撤销与恢复
- 实现文本的复制和粘贴、文本的撤销和恢复(Swing JTextArea)
- Java应用技巧——文本撤销、恢复功能的实现
- Android EditText 的撤销和恢复(反撤销)
- 撤销和恢复
- 【vim】撤销和恢复撤销快捷键
- 小白学tkinter(Text组件的‘撤销’和‘恢复’操作)
- Java Swing 支持 撤销和恢复功能 ctrl+z ctrl+y
- 关于撤销、恢复的基本想法
- vim-2 删除命令、数字的奥义、撤销和恢复命令
- JEditorPane插入很多字符和撤销 恢复操作
- 【Git】Git撤销操作、删除文件和恢复文件
- Git 撤销操作、删除文件和恢复文件
- 命令模式--撤销恢复
- VIM 撤销与恢复
- vim 撤销 恢复
- 文本复制、剪切、撤销
- 毕业后就是程序员(四)——人生道路的选择
- ODBC数据源
- java的集合类collection
- 二、CPU篇
- struts2 version 2.3.4.1 xml validation
- java文本的撤销和恢复
- RUIM与NV[关于CDMA订阅在RUIM与NV之间切换的问题]
- Objective-C的消息传递机制
- 自定义布局执行流程之 画出自己定义的View
- Android应用开发揭秘的第7个程序5_2_SurfaceViewDrawCircle修改版和高仿版的源码注释
- Eclipse启动Tomcat后无法访问项目
- Ubuntu 12.04 配置minicom
- SQL从数据库中随机取数据(原文转自博客园)
- ubuntu连接ssh不上