我正在研究如何“画画” 在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寻求任何帮助或建议:)
答案 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交谈的中间格式,并以其他方式存储样式文本。