- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解使用 UndoManager 的撤消/重做功能,以及将其与 MVC 模型集成。
我不确定将各种方法放在哪里(在模型、 View 或控件中)而且我仍然不确定如何使用撤消管理器。
我的控件类实现了UndoableEditListener它创建:
private UndoManager manager = new UndoManager();
并在:
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Undo")) {
try {
manager.undo();
} catch (CannotUndoException ex) {
ex.printStackTrace();
}
}
}
到这里我明白了,但剩下的我不确定该怎么做。我知道我必须在模型和 View 类中添加更多内容,但不确定在哪里。我必须参加以下类(class)吗?
public class UndoAction extends AbstractAction {}
public void undoableEditHappened(UndoableEditEvent e) {
我只是在文本字段中放置一个整数,然后我希望能够撤消它。我在 View 类的文本字段中设置数字。我想以最简单的方式实现这一点,没有花哨的编码!这是我的 assg 的一小部分,但我无法让它工作!!
============================================= ===========这是我的代码的更详细描述,也许它会有所帮助:
我有一个模型、 View 和控制包。
Contol 有: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());
在 View 中:扩展 JTextField 的 Grid.java 将在需要在 GUI 上显示数字的任何地方添加以下内容:(模型只是我的模型类的一个实例)
getDocument().addUndoableEditListener(new ButtonGUIControl(model));
可能是因为 UndoManager 是在不同的包中创建的?我真的不知道如何调试它了!!
如果有帮助,我可以发布我的全部代码。我想我不确定如何将它与我的 mvc 模型结构集成。
最佳答案
退后一步。这里的整个想法是用户将使用您的应用程序并对某些内容进行一系列更改。文本编辑器就是一个很好的例子。您可以插入字符和行,再次删除它们,用其他文本替换文本,滚动文本等。为了使用 MVC 支持这一点,您有一个保存状态的模型和一个显示它的 View 。
您的第一直觉可能是让 View 直接访问模型,然后在每次用户进行更改时刷新 View ,但很难通过该实现撤消这些更改。相反,您对用户可以在能够执行该更改并随后可以撤消该更改的类中进行的每一种更改进行编码。
例如,插入文本的操作将由知道插入点的字符偏移量和要插入的字符串的类来实现。执行操作会在偏移量处插入字符串,而撤消操作会删除该插入点后正确数量的字符。您将有一个不同的类来处理删除,另一个类来处理滚动等。
每次用户执行某些操作时, View 都会构造这些 UndoableEdit 类之一,并告诉实例自行运行 (redo())。执行后,您将该 UndoableEdit 放在 UndoableEdit 实例列表的末尾,这些实例表示用户到目前为止已执行的所有操作。这个列表使得支持任何顺序的撤消请求、重做请求和实际编辑操作变得非常容易(导致更多的 UndoableEdit 被放在列表中)。
回到你的问题。如果您的应用程序需要支持撤消和重做,那么您需要实现一个 UndoManager,它只管理 UndoableEdit 列表并根据需要执行撤消和重做。您还必须实现一大堆 UndoableEdits,一个用于您的用户将对 UI 执行的每种操作。至于听众,我看不出你真的需要那样做。
关于java - 如何在 Java 中为 MVC 模型实现撤消/重做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772821/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!