1. 程式人生 > >Java應用技巧——文字撤銷、恢復功能的實現

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();

}

這樣一來,文字編輯器的撤銷、恢復功能很容易地就實現了。以下是一個例子:

執行效果如下: