因此,我们需要实现的是一个具有多个节点(最多数百个)的树形菜单。一个节点可以有子节点,然后可以展开/折叠。还有一个鼠标悬停的背景闪电和鼠标选择的背景闪电。每个节点都有一个框、一个图标和一个文本,可以很大,占据整个屏幕宽度。
这是一个已经工作的解决方案的示例:
基本上我是:
第一次渲染文本,只是为了获得可能的背景突出显示的长度
渲染框和图标纹理(是的,我知道,它们现在是颠倒的)
第二次渲染文本,首先是粗体,然后是正常的
该解决方案实际上具有相对可接受的性能影响。
然后我们尝试了另一种方法,即使用g Graphic java 通过绘制树形菜单并将其作为 bufferedImage 返回以在最后创建一个大纹理渲染它。所有这些显然都是在每个节点折叠/展开以及每次鼠标移动时完成的。
这表现得更好,但Java 似乎在处理旧的 bufferedImages 时遇到了一些大麻烦。事实上,内存消耗不断增加,强制垃圾收集通过减慢它只会略微增加内存,但仍然......此外,性能下降,因为每次都调用垃圾收集器并且看起来一点也不轻。
所以我要问你的是:哪种策略最能满足我的需求?
在不同的纹理上渲染每个节点也可能是可行的(实际上是三个:一个正常,一个具有用于鼠标悬停的浅色背景,最后一个具有用于鼠标选择的正常背景),然后在每个 display() 处将所有这些纹理与当前树菜单状态?