用于多色文本的Java图形库

用于多色文本的Java图形库,java,graphics,Java,Graphics,我想知道在Java中处理多色文本的推荐库或过程。我目前使用的java.awt.Graphics虽然功能强大,但似乎有点过于复杂 主要问题涉及颜色的频繁变化,每当需要新颜色时创建一个新的java.awt.color对象,而该颜色通常不是预定义的值之一。我已经记录了以前使用的rgb值,但颜色可能会改变为我绘制的每个字符的唯一值: java.awt.Color colorRender = new java.awt.Color(rgb); g.setColor(colorRender); 我还对我的代

我想知道在Java中处理多色文本的推荐库或过程。我目前使用的java.awt.Graphics虽然功能强大,但似乎有点过于复杂

主要问题涉及颜色的频繁变化,每当需要新颜色时创建一个新的java.awt.color对象,而该颜色通常不是预定义的值之一。我已经记录了以前使用的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);

我已经研究过BuffereImage类——虽然它非常适合像素级图形,但它不直接支持绘图字符

这不是一个真正的答案,但如果您认为/衡量创建大量颜色对象是一个性能瓶颈,您可以使用自己的工厂方法来替换对新Colorrgb的调用,该方法缓存已创建的颜色。我假设Colors类是不可变的——看起来是不可变的


因此,添加一个ColorsFactory类,该类使用静态方法getColorrgb方法缓存已经创建的颜色。您可以简单地将所有颜色放在地图rgb->Colorrgb中,并将其永久保留,或者您可以尝试创建缓存,删除不经常使用的颜色—这取决于您的程序的使用方式。

尝试组件的开源部分。这包括一个名为StyledLabel的类,它是一个支持多色字体的Swing JLabel。

读者更新:

实际问题是由一个经常调用的方法引发运行时异常,并使用该异常返回默认值引起的。我更改了此方法的代码以避免提前发生异常,如果异常仍然发生,则让调用函数处理它们。 由于默认值没有那么有用,我添加了代码以跳过过去渲染大多数字符的过程。
我假设您是通过paintComponent将文本呈现给任意组件,而不是试图修改JTextPane、JLabel或其他预先存在的小部件中文本的颜色

如果是这种情况,您应该考虑使用随附的。这些允许您为字符串中的不同字符范围指定不同的样式、颜色、字体等,然后使用Graphics.drawString…呈现整个字符串。。。。这样,底层图形子系统将在渲染期间处理对图形状态的任何必要更改,从而使代码更具可读性,并且可能更快

这是一个示例用法


当然,正如其他人所提到的,您还应该缓存颜色对象,而不是一遍又一遍地重新创建它们。

库的使用方式如下: