我想知道在Java中处理多色文本的推荐库或过程.我目前对java.awt.Graphics的使用虽然是函数,但似乎比必要的要复杂一些.
主要问题涉及频繁更改颜色,每当需要新颜色时创建一个新的java.awt.Colour()对象(并且它通常不是预定义值之一.)我已经跟踪以前使用的rgb值,但是有可能颜色可能会变为我绘制的每个角色的唯一值:
java.awt.Color colorRender = new java.awt.Color(rgb); g.setColor(colorRender);
我还在我的代码上运行了一个分析器,并确定了极端情况下的次要瓶颈.我怀疑它可能是用于绘制单个字符的方法,但在确定所述字符时可能存在开销:
char[] c = new char[1]; // Created once for many uses /* ... */ g.drawChars(charRender, 0, 1, x, y);
我看过BufferedImage类 - 虽然它非常适合像素级图形,但它并不直接支持绘图字符.
我假设您正在将文本渲染到任意组件(通过paintComponent()),而不是尝试修改JTextPane,JLabel或其他预先存在的窗口小部件中的文本颜色.
如果是这种情况,您应该考虑使用AttributedString和TextAttribute.这些允许您为字符串中的各种字符范围分配不同的样式(颜色,字体等),然后使用Graphics.drawString(...)呈现整个字符串.这样,底层图形子系统将在渲染过程中处理对图形状态的任何必要更改,使您的代码更具可读性,并且可能更快.
这是一个示例用法.
当然,正如其他人所提到的,你也应该缓存你的Color对象而不是一遍又一遍地重新创建它们.