在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来实现撤销功能,用户可以撤销最近的文本操作。