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