在Java中,JTextArea中并沒有直接提供撤銷功能的方法。但可以通過使用UndoManager和DocumentListener來實現撤銷功能。
首先,創建一個UndoManager對象來管理撤銷操作:
UndoManager undoManager = new UndoManager();
接著,給JTextArea添加DocumentListener來監聽文本的變化,并在文本變化時將新的文本添加到UndoManager中:
jTextArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
undoManager.addEdit(new AbstractDocument.DefaultDocumentEvent(e.getOffset(), e.getLength(), AbstractDocument.EventType.CHANGE));
}
@Override
public void removeUpdate(DocumentEvent e) {
undoManager.addEdit(new AbstractDocument.DefaultDocumentEvent(e.getOffset(), e.getLength(), AbstractDocument.EventType.CHANGE));
}
@Override
public void changedUpdate(DocumentEvent e) {
// Not used
}
});
最后,可以通過Ctrl+Z來觸發撤銷操作,代碼如下:
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK);
jTextArea.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "undo");
jTextArea.getActionMap().put("undo", new AbstractAction("undo") {
@Override
public void actionPerformed(ActionEvent e) {
if (undoManager.canUndo()) {
undoManager.undo();
}
}
});
以上代碼實現了在JTextArea中使用Ctrl+Z來實現撤銷功能,用戶可以撤銷最近的文本操作。