我无法理解使用 UndoManager 的撤消/重做功能,并将其与 MVC 模型集成。
我不确定将各种方法放在哪里(在模型、视图或控件中),我仍然不确定如何使用撤消管理器。
我的控件类实现 UndoableEditListener 它创建:
private UndoManager manager = new UndoManager();
并在:
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Undo")) {
try {
manager.undo();
} catch (CannotUndoException ex) {
ex.printStackTrace();
}
}
}
我理解到这里,但其余的我不知道该怎么做。我知道我必须在模型和视图类中添加更多内容,但不确定在哪里。我必须有以下课程吗?
public class UndoAction extends AbstractAction {}
public void undoableEditHappened(UndoableEditEvent e) {
我只是在文本字段中放置一个整数,然后我希望能够撤消它。我在视图类的文本字段中设置了数字。我想以最简单的方式实现这一点,没有花哨的编码!这是我 assg 的一小部分,但我就是不能让它工作!!
==================================================== ======== 这是我的代码的更详细描述,也许它会有所帮助:
我有一个模型、视图和控制包。
控制有:ButtonGUIControl.java,它实现了两者
ActionListener and
UndoableEditListener.
final UndoManager manager = new UndoManager();
在 actionPerformed 方法中,它调用
if (e.getActionCommand().equals("Undo")){
try {
manager.undo();
}
并在:
public void undoableEditHappened(UndoableEditEvent evt) {
manager.addEdit(evt.getEdit());
}
在视图中:扩展 JTextField 的 Grid.java 将在需要在 GUI 上显示数字的任何位置添加以下内容:(模型只是我的模型类的一个实例)
getDocument().addUndoableEditListener(new ButtonGUIControl(model));
可能是因为 UndoManager 是在不同的包中创建的吗?我真的不知道如何调试这个了!!
如果有帮助,我可以发布我的整个代码。我想我不确定如何将它与我的 mvc 模型结构集成。