- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 java swing 中开发一个涂鸦类型的应用程序。它处于初级阶段,如下所示。
我已经实现了撤消功能,可以撤消最后绘制的笔画。撤消功能最多可以完成定义的最大撤消级别。
撤消功能的工作原理是在图像数组
中的每个笔划之后复制绘图 Canvas 的内容。该数组的作用类似于先进后出
堆栈。单击撤消时,堆栈将弹出
并将获得的图像绘制在屏幕上。
现在我面临的问题是,当前实现undo的方法占用了太多的内存。当撤消级别为 20 时,几乎使用了 70-80 MB 的内存,当撤消级别为 30 时,会发生堆溢出。
是否有更好的方法来实现撤消功能?谢谢。
编辑:我发现了一些有用的信息here这可能会有所帮助。
最佳答案
您需要以不同的方式表示绘图中的步骤。在您当前使用的方法中,您每次都将 Canvas 重新保存为未压缩的图片 - 这是内存贪婪的。
尝试重构您的代码,以便仅将在 Canvas 上绘制的笔画保存到堆栈中。这会在渲染图片时增加一点开销(每次发生更改时都需要重新绘制整个 Canvas ),但 Java 旨在处理这个问题。
仅保存形状后,内存需求应该会显着减少。使用 Shape
类来表示 Canvas 上的笔画。
关于java - Swing App 中实现 Undo 的堆溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967185/
为了重置我的最后一次提交,我这样做了: git reset --soft HEAD^ 但是我做了太多次了。现在我想往回走几步。这可能吗? 另外,我有一个开发人员在一个生产应用程序上提取和 merge
在 Vim 中,我做了太多撤消操作。我如何撤消此操作(即重做)? 最佳答案 Ctrl+r 关于vim - 如何在 Vim 中重做(即 "undo undo")?,我们在Stack Overflow上找
在过去的 3 周里,我一直在尝试能够以编程方式调用撤消命令。我最近的尝试涉及从 C# 调用 LISP 代码。现在我的 C# 方法看起来像这样 [CommandMethod("TestLispFromC
如何使用 ctrl+z (ApplicationCommand.Undo) 键来实现我们自己的撤消方法,而不是使用 WPF 中的默认命令。基本上用我们自己的撤消方法替换默认命令。 例如:我想将 ctr
在 Word 窗口中,执行诸如键入、格式化字体、段落...以确保撤消列表不为空,然后通过单击功能区上的任何样式来更改某些文本的样式。撤消列表中会出现一个名为“应用快速样式”的条目。然后运行宏,如: S
我有一个在“Worksheet_SelectionChange” 事件上触发的宏。宏验证一列的数据,如果错误则更改单元格的背景颜色。 问题是运行宏后,它会清除所有文档的更改历史记录(Ctrl Z),甚
有什么方法可以撤销 Mikephil 图表上的选择?当我在条形图中选择一个值时,我有一个应用程序会打开一个 Activity 。这很好用,但是,当我返回到包含图表的 Activity 时,选择仍然存在
完成此任务的最佳做法是什么: 我有提交: A -- B -- C 提交 B 包括: file1.java file2.java icon.png 我想撤消对 file1 和 file2 的更改,但不想
我刚刚用 git branch -D branchName 进行了一些我需要的实验性更改删除了错误的分支。 如何恢复分支? 最佳答案 您可以使用 git reflog找到分支最后一次提交的 SHA1。
所以我正在使用 CodeMirror,我想要一种方法来从 undo 状态中省略某些编辑。特别是,我遇到了一种情况,我想要一次击键 替换部分镜像文本并 自动缩进新区域 天真地这样做意味着使用击键,然后点
我正在编写指令,它将像这样: 允许编辑一些文本(使用内容可编辑) 在失去焦点时,它应该将其值保存到模型(最近观看并保存到 DB) 应该有按钮“撤消”可以恢复更改。 我的实现是:http://plnkr
我听说纯函数式数据结构的好处之一是您可以免费获得撤消/重做操作。有人可以解释为什么吗?我不明白为什么在函数式语言中添加撤消/重做更容易。 例如,假设我有以下队列实现: data Queue a = Q
我有一个内置于 iPhone 核心数据中的数据模型。我还有一个适用于该模型的 NSUndoManager 。问题是,我不想在撤消过程中影响实体上的某些属性,而我确实希望回滚其他属性。在不彻底改变事情的
令我惊讶的是,我找不到有关该主题的任何信息,但是搜索此类内容总是会产生很多相似但不相关的内容... 无论如何,一些注意事项以避免误解:- 问题与 HTML、HTTP、Javascript 和浏览器行为
这个问题已经有答案了: 已关闭13 年前。 Possible Duplicate: Design Pattern for Undo Engine 一般来说,您如何处理在应用程序中支持“撤消”功能?我曾
我一直在问很多有关事件溯源的问题,因此对此表示歉意,但我想从一开始就解决这个问题。 设置 | p_key | invoice_id | EmployeeId | Event type |
我从主分支在 Visual Studio 中做了一些代码更改,并试图在 TortoiseHG 的新分支中提交更改,但显然我不小心将更正提交到主分支。我没有将更改推送到远程存储库,但如果我尝试对更改执行
有没有办法在单击后退按钮时“撤消”由 jQuery 执行的函数?例如,我要执行的函数名为 doSomething: function doSomething(button) { ...cli
假设我有这个迁移: class MigrateStuff false add_index :contacts, :receive_newsletter for t in SomeOt
现状 我有一个使用 MVVM 和 NHibernate 的 WPF 应用程序。我有一个包含所有客户的列表框的主/详细信息窗口,列表框的 selectedItem 是用于在详细信息屏幕中显示客户详细信息
我是一名优秀的程序员,十分优秀!