gpt4 book ai didi

java - 在 Java SWT 中将绘图线程化到 Canvas 上

转载 作者:行者123 更新时间:2023-11-30 12:00:49 26 4
gpt4 key购买 nike

一段时间以来,我一直在做一些我只能描述为“线程 Canvas ”的事情。稍后我将描述我所拥有的,但由于我真的乐于接受新想法、现有解决方案或全新的开始,所以我将阐述问题。

Canvas 旨在显示遗传信息(尽管具体用途有些无关紧要)。作为传统的文本编辑器,该遗传代码被绘制到 Canvas 上,用户可以在 Canvas 上通过键入、选择等方式与其进行交互。然后,该代码进一步用各种非文本特征(例如形状、线条和颜色)进行装饰。

这里的主要问题是在显示某些信息之前需要进行大量计算。

考虑以下模型:

Sample of canvas http://img23.imageshack.us/img23/9931/canvasgv.png

如您所见,遗传密码是等宽的,但 enzyme 切(显示在遗传密码上方)不是。计算 enzyme 切割的位置是乏味的,因为屏幕上可能有很多显示特征(上图,蓝色箭头)。三字母代码表示三个遗传密码 block 的翻译;尽管执行速度很快,但在序列中输入一个字母会使它们全部移动一个——需要重新计算。

最好,为了加快处理速度,这些部分中的每一个都可以出现在一个单独的线程中,最后汇集在一起​​组成最终图像。

总结:显示的各个部分在计算上很困难,尽管编辑器的响应速度当然是最好的。

我目前的实现涉及在单独的线程中执行所有绘制事件。通过键入、调整大小或进行选择,可能会创建大量线程,但只有最近的线程才会继续更新显示。这保证更新显示不会超过一次迭代,但不会提供快速的 UI 反馈。

我研究过对现有编辑器进行修改,例如 StyledText , 但除了一些粗体和颜色之外的任何东西都会使它显着变慢。

有什么建议吗?

最佳答案

最好的办法可能是在 StyledText 中嵌入其他 SWT 小部件。每个小部件将在后台线程中执行特定计算,并在结果进入时更新其可视化表示。请注意,您可以在后台进行计算,但渲染必须在 SWT 线程中进行。所以你不能在渲染过程中做很多复杂的事情。如果事情变得太慢,请使用缓存图像(创建几个屏幕外图像,您可以在其中渲染结果,然后简单地绘制这些图像)。

Canvas 扩展这些小部件因为这是用于自定义呈现的小部件。它还将允许您对不同的事件使用react(即,当用户将鼠标悬停在 enzyme 切上时显示其他信息)。

不过要小心 enzyme 切:它们的高度各不相同。我建议在默认情况下给这个小部件多一点空间(即使它没有被使用)这样当小部件计算和添加削减时文本不会跳跃太多。

关于java - 在 Java SWT 中将绘图线程化到 Canvas 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com