Java应用技巧——文本撤销、恢复功能的实现
2010-01-03 15:01
746 查看
作文本编辑器的时候,撤销(undo)、恢复(redo)是必不可少的两个功能。实现这个功能,要用到javax.swing.undo包中的UndoManager类。
UndoManager类有如下常用方法:
boolean canUndo() ——判断能否进行撤消操作,可以则返回true。
boolean canRedo() ——判断能否进行恢复操作,可以则返回true。
void Undo() ——进行撤消操作。
void Redo() ——进行恢复操作。
但是,进行撤销、恢复操作前还应为撤销、恢复的对象注册侦听器。在文本编辑器中,对象就是文本。例如先声明两个对象:
JTextArea text = new JTextArea();
UndoManager undomg = new UndoManager();
接下来,为text添加侦听器:
text.getDocument().addUndoableEditListener(undomg);
这里要说名一下,之所以要写getDocument()是因为注册侦听器的对象是文本,不是文本框。addUndoableEditListener(undomg)的作用是为text的文本注册侦听器,该方法的原型是:
void addUndoableEditListener(UndoableEditListener listener)
可以看出,该方法的参数应是一个UndoableEditListener接口类型的参数,而我们用的参数是UndoManager类型,这是因为UndoManager类已经实现了UndoableEditListener接口的缘故。
现在就可以进行撤销、恢复操作了。方法是:
undomg.Undo(); //撤销
undomg.Redo(); //恢复
但是这样不算完美,因为如果无法撤销或恢复,这两个语句就不会起任何作用。因此我们改用如下方法:
if(undomg.canUndo()) { //撤销
undomg.Undo();
}
if(undomg.canRedo()) { //恢复
undomg.Redo();
}
这样一来,文本编辑器的撤销、恢复功能很容易地就实现了。以下是一个例子:
运行效果如下:
UndoManager类有如下常用方法:
boolean canUndo() ——判断能否进行撤消操作,可以则返回true。
boolean canRedo() ——判断能否进行恢复操作,可以则返回true。
void Undo() ——进行撤消操作。
void Redo() ——进行恢复操作。
但是,进行撤销、恢复操作前还应为撤销、恢复的对象注册侦听器。在文本编辑器中,对象就是文本。例如先声明两个对象:
JTextArea text = new JTextArea();
UndoManager undomg = new UndoManager();
接下来,为text添加侦听器:
text.getDocument().addUndoableEditListener(undomg);
这里要说名一下,之所以要写getDocument()是因为注册侦听器的对象是文本,不是文本框。addUndoableEditListener(undomg)的作用是为text的文本注册侦听器,该方法的原型是:
void addUndoableEditListener(UndoableEditListener listener)
可以看出,该方法的参数应是一个UndoableEditListener接口类型的参数,而我们用的参数是UndoManager类型,这是因为UndoManager类已经实现了UndoableEditListener接口的缘故。
现在就可以进行撤销、恢复操作了。方法是:
undomg.Undo(); //撤销
undomg.Redo(); //恢复
但是这样不算完美,因为如果无法撤销或恢复,这两个语句就不会起任何作用。因此我们改用如下方法:
if(undomg.canUndo()) { //撤销
undomg.Undo();
}
if(undomg.canRedo()) { //恢复
undomg.Redo();
}
这样一来,文本编辑器的撤销、恢复功能很容易地就实现了。以下是一个例子:
]import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.undo.*; class UndoDemo extends JFrame { static JTextArea text = new JTextArea(); static JPanel pnl = new JPanel(); static JButton unbtn = new JButton("撤销"); static JButton rebtn = new JButton("恢复"); static UndoManager undomg = new UndoManager(); UndoDemo() { super("撤销、恢复功能实例"); setVisible(true); setSize(400,300); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout(5,5)); pnl.setLayout(new FlowLayout(5)); pnl.add(unbtn); pnl.add(rebtn); add(pnl,BorderLayout.NORTH); add(text,BorderLayout.CENTER); text.getDocument().addUndoableEditListener(undomg); unbtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if(undomg.canUndo()) { undomg.undo(); } else { JOptionPane.showMessageDialog(null,"无法撤销","警告",JOptionPane.WARNING_MESSAGE); } } }); rebtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if(undomg.canRedo()) { undomg.redo(); } else { JOptionPane.showMessageDialog(null,"无法恢复","警告",JOptionPane.WARNING_MESSAGE); } } }); } public static void main(String[] args) { new UndoDemo(); } }
运行效果如下:
相关文章推荐
- C# 简单文本编辑的撤销恢复功能实现
- photoswipe实现图片放大功能在java中应用
- js实现撤销恢复功能
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- JAVA通过正则表达式实现EXCEL小插件取文本功能
- java文本之撤销与恢复
- 使用Command模式实现应用的撤销功能
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- 使用技巧:Java实现随机验证码功能实例
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 实现文本的复制和粘贴、文本的撤销和恢复(Swing JTextArea)
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础
- Java学习笔记——应用矢量和迭代器来实现类似链表的功能
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 安卓view的绘制,涂鸦功能实现,恢复撤销功能
- Java基于正则表达式实现的替换匹配文本功能【经典实例】
- java实现查找文本内容替换功能示例
- intent应用——文本管理器功能实现
- 使用技巧:共享内存在Java中实现和应用