JTextArea中的撤消功能 [英] Undo functionality in JTextArea
本文介绍了JTextArea中的撤消功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在 JTextArea
中实现撤消功能.用Google搜索教程,并按照其中一个教程编写了以下代码.按下Ctrl + Z键会触发事件.它对我不起作用.我想念什么吗?
I am trying to implement undo functionality in JTextArea
. Googled for tutorial and followed one of the tutorial and wrote the below code. The event is triggered when Ctrl+Z key is pressed. Its not working for me. Am I missing something?
private void undoActionPerformed(java.awt.event.ActionEvent evt) {
Document doc = editorTextArea.getDocument();
final UndoManager undo = new UndoManager();
doc.addUndoableEditListener(new UndoableEditListener() {
@Override
public void undoableEditHappened(UndoableEditEvent e) {
undo.addEdit(e.getEdit());
}
});
}
推荐答案
从您的例子来看,很难知道您已经做了多少,但是我能够做到这一点...
From you're example, it's difficult to know how much you've done, but I was able to get this to work...
private UndoManager undoManager;
// In the constructor
undoManager = new UndoManager();
Document doc = textArea.getDocument();
doc.addUndoableEditListener(new UndoableEditListener() {
@Override
public void undoableEditHappened(UndoableEditEvent e) {
System.out.println("Add edit");
undoManager.addEdit(e.getEdit());
}
});
InputMap im = textArea.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = textArea.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Undo");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Redo");
am.put("Undo", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (undoManager.canUndo()) {
undoManager.undo();
}
} catch (CannotUndoException exp) {
exp.printStackTrace();
}
}
});
am.put("Redo", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (undoManager.canRedo()) {
undoManager.redo();
}
} catch (CannotUndoException exp) {
exp.printStackTrace();
}
}
});
这篇关于JTextArea中的撤消功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文