java撤销一步,Java应用技巧——文本撤销、恢复功能的实现
时间: 2023-10-22 15:09:32 浏览: 40
实现文本撤销、恢复功能可以使用Java Swing中提供的UndoManager类。该类是一个管理撤销、恢复操作的类,可以用来实现文本编辑器中的撤销、恢复功能。
下面是一个简单的示例代码,演示如何使用UndoManager实现文本撤销、恢复功能:
```java
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;
public class TextEditor extends JFrame {
private JTextArea textArea;
private UndoManager undoManager;
public TextEditor() {
textArea = new JTextArea();
undoManager = new UndoManager();
// 添加撤销、恢复操作监听器
textArea.getDocument().addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent e) {
undoManager.addEdit(e.getEdit());
}
});
// 添加菜单项和快捷键
JMenuBar menuBar = new JMenuBar();
JMenu editMenu = new JMenu("编辑");
JMenuItem undoItem = new JMenuItem("撤销");
undoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
undoItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (undoManager.canUndo()) {
undoManager.undo();
}
}
});
JMenuItem redoItem = new JMenuItem("恢复");
redoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK));
redoItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (undoManager.canRedo()) {
undoManager.redo();
}
}
});
editMenu.add(undoItem);
editMenu.add(redoItem);
menuBar.add(editMenu);
setJMenuBar(menuBar);
add(new JScrollPane(textArea));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new TextEditor();
}
}
```
在上述代码中,我们首先创建了一个JTextArea和一个UndoManager对象。然后,我们为JTextArea的Document添加了一个UndoableEditListener,监听文本编辑操作。每次用户进行文本编辑时,就会产生一个UndoableEditEvent事件,我们将该事件加入到UndoManager中,以便后续进行撤销、恢复操作。
接着,我们创建了一个菜单栏,并添加了“撤销”和“恢复”两个菜单项,分别对应undoManager的undo()和redo()方法。我们还为这两个菜单项添加了快捷键,方便用户使用。
最后,我们将JTextArea添加到JScrollPane中,并将其添加到窗口中显示。当用户进行文本编辑操作时,可以使用菜单栏或快捷键进行撤销、恢复操作。
希望这个示例代码对你有所帮助!