AttributedString的“内容”可以保存在文件中吗?

时间:2009-03-02 12:58:03

标签: java swing graphics

我正在研究如何“画画” 在Graphics2D上有一些归属文本。

所以,我感兴趣的是可以保存 某种格式的AttributedString的内容?

我知道它可能是Java序列化的, 但是,我不需要这个解决方案。

另外,如果有人知道一些显示的例子 如何编辑AttributedString?

这是一些Java代码,只是为了得到想法:

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

AttributedString as new AttributedString( "Lorem ipsum dolor sit amet..." );
Font font1 = new Font( "SansSerif" , Font.PLAIN , 20 );
as.addAttribute( TextAttribute.FONT       , font1       );
as.addAttribute( TextAttribute.FOREGROUND , Color.black );
as.addAttribute( TextAttribute.FOREGROUND , Color.blue , 4 , 9 );

AttributedCharacterIterator aci = as.getIterator();
FontRenderContext           frc = g2.getFontRenderContext();
LineBreakMeasurer           lbm = new LineBreakMeasurer( aci , frc );

TextLayout  textLayout = lbm.nextLayout( wrappingWidth );

int x = 50 , y = 50 ;
textLayout.draw( g2 , x , y );

}

Thanx寻求任何帮助或建议:)

2 个答案:

答案 0 :(得分:1)

显然,最简单的方法是java序列化,否则你需要处理所有可能的文本属性。 如果你想要一个例子,这里有一个我编写的报告生成器,它广泛使用了AttributedString。希望它会有所帮助: http://www.perry.ch/mo/pureport.zip

答案 1 :(得分:0)

AttributedString没有文本序列化格式,你必须自己编写。

AttributedString / AttributedCharacterIterator是Java 1.2中首次引入的旧API,并且从未“强化”以提供良好的样式文本模型。例如,您会注意到它缺少一些明显的东西,例如'length()'方法,或实现Externalizable / Serializable。您可以通过为它获取AttributedCharacterIterator来迭代它,但由于可以存在AttributedCharacterIterator.Attribute的自定义子类,因此无法在没有本机序列化的情况下可靠地记录所有内容。

最好只使用AttributedString作为与InputMethod或TextLayout API交谈的中间格式,并以其他方式存储样式文本。