如何将RTF格式的字符串打印到JLabel?

时间:2012-03-15 20:45:46

标签: java swing formatting paintcomponent jtextcomponent

我的自定义JComponent 可以执行大量的绘图操作。

它们还包括用于文本段落的drawStrings,但现在我喜欢格式化文本(在带有jtextpane或其他RTF编辑器的单独窗口中)(粗体,字体大小,对齐,字体颜色,列表)并显示此格式我自己的组件中的文本。

我想在没有缓冲图像的情况下这样做,因为如果我有一个充满图像的大jcomponent,我会得到一个溢出错误(RAM)

像AttributedString这样的东西可以工作,但是怎么样?

我真的不知道如何从Jtextpane中获取 RTF-Text (或者如果有更好的编辑器,请告诉我)和在“paintComponent”中绘制它(图形g)“方法

编辑器只是用来轻松格式化文本,而不是用于演示文稿(使用我自己的组件完成)

有人可以帮我吗?


感谢您的帮助,

所以我创建一个AttributeString,然后在其中应用RTF格式?

你知道如何将RTF信息拉伸到适当的AttributedString吗?例如将格式化文本转换为AttributedString的函数,如

public AttributedString getAttrString(String plainRTF){
   ...
}

非常感谢

2 个答案:

答案 0 :(得分:1)

尝试使用此自定义AdvancedRTFEditorKit http://java-sl.com/advanced_rtf_editor_kit.html

答案 1 :(得分:0)

您可以解析基础Document的结构以获取实际元素。每个Element都有一组您可以使用getAttributes()访问的属性。

您可以使用AttributedString构建document.getText()并使用AttributedString.addAttribute()方法应用相应的样式。

然后在Graphics上绘制字符串。查看使用TextLayout呈现AttributedString的tutorial

查看styledDocumentToAttributedString()方法here。它可能已经实现了你所需要的东西;这取决于你的字符串的复杂性。此外,此discussion可能很有用。