如何将多种字体添加到Graphics2D对象绘制的字符串中

时间:2013-04-16 23:22:20

标签: java fonts graphics2d

我有一个Graphics2D对象,我想使用它的drawString方法。我可以调用该方法并传递一个String和(x,y)位置,这非常好。但是,我也可以使用需要Font对象的Graphics2D方法更改setFont对象的字体。这也很好。不幸的是,这对我来说还不够,因为我打算为我的Font对象定义多个字体文本。

这是我想要传输到我的Font对象的文本表示:

font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif

我已经看到我有可能使用AttributedCharacterIterator界面来解决我的问题,但是,我不知道该如何使用它。我已经看到实际上有一个名为AttributedString的实现,它有一组Attributes,但我不知道如何创建一个AttributedString对象,可以被构造函数使用以Font对象识别多种字体并在我致电Graphics2D时应用它们。{/ 1}}。{/ 1}

编辑:

drawString

在上面的代码中,我尝试使用Andale Mono,在我测试此应用程序的系统中已知,但是,在生成的图形中,文本以Times New Roman字体绘制。有些事情是错的,不幸的是我对于我可能遗失的东西一无所知。

3 个答案:

答案 0 :(得分:5)

基本上,AttributedString提供了允许您将渲染属性应用于String的方法。看起来很明显。

之后,您可以将AttributedString的{​​{1}}传递给AttributedCharacterIterator进行渲染......

enter image description here

Graphics2D

您可以查看this了解详情

答案 1 :(得分:4)

Graphics2D有一个你想要使用的drawString(AttributedCharacterIterator, int, int)方法。

只需为字符串的每个特定子范围构建您想要的所有不同TextAttribute.FONT属性的AttributedString,然后调用:

g2d.drawString(myAttributedString.getIterator(), x, y);

答案 2 :(得分:0)

据我所知,不可能将多种字体分配给相同的字体对象,但是,如果我们想要为同一个Graphics2D对象分配多种替代字体,则是必要的。因此,这个问题没有解决方案,但如果有人向我展示解决方案,我会接受他/她的回答。现在,不幸的是,我必须接受我自己的答案,该答案表明这个问题无法解决。