Java应用技巧——文本撤销、恢复功能的实现
作文本编辑器的时候,撤销(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();
}
这样一来,文本编辑器的撤销、恢复功能很容易地就实现了。以下是一个例子:
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);
s
相关文档:
自 java 平台从 1995 年作为一个整体引入编程社区开始,它的发展已经远远超出了早期 java 专家和推介者所设想的“applet 无处不在”这一远景。相反,java 世界出现了 Swing、与 servlet 结合,从而发展为 J2EE、出现了 EJB、超越了 Spring 和 Hibernate、添加了泛型,变得越来越具有动态性,然后实现了函数化,在 ......
数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量
数组中的元素可以是任何数据类型,包括基本类型和引用类型
记住数组首先分配空间再赋值!
动态初始化:就是先分配空间再赋初值;
静态初始化:定义数组同时就为数组元素分配空间并赋值。
1一维数组的声明
一维数组的声明:type va ......
private String smtpHost;
private String smtpUserName;
private String smtpPassword;
public void sendEmail(String fromAddress, List<String> toAddresses, List<String> ccAddresses,
String subject, String message) {
Properties props = new Properties();
props.put("mail.smtp.host", smt ......