在我的 Swing 应用程序中,用户将样式化的文本输入到使用 RTFEditorKit 的JTextPane中(也可以使用 HTML)。
然后,我需要在自定义组件中的特定坐标处呈现许多这些样式化的注释。
我认为View.paint方法在这里会有所帮助,但我无法创建可用的 View 对象。
我有以下方法:
public View createView() throws IOException, BadLocationException {
RTFEditorKit kit = new RTFEditorKit();
final Document document = kit.createDefaultDocument();
kit.read(new ByteArrayInputStream(text.getBytes("UTF-8")), document, 0);
return kit.getViewFactory().create(document.getDefaultRootElement());
}
这将返回具有以下属性的 javax.swing.text.BoxView:
majorAxis = 1
majorSpan = 0
minorSpan = 0
majorReqValid = false
minorReqValid = false
majorRequest = null
minorRequest = null
majorAllocValid = false
majorOffsets = {int[0]@2321}
majorSpans = {int[0]@2322}
minorAllocValid = false
minorOffsets = {int[0]@2323}
minorSpans = {int[0]@2324}
tempRect = {java.awt.Rectangle@2325}"java.awt.Rectangle[x=0,y=0,width=0,height=0]"
children = {javax.swing.text.View[1]@2326}
nchildren = 0
left = 0
right = 0
top = 0
bottom = 0
childAlloc = {java.awt.Rectangle@2327}"java.awt.Rectangle[x=0,y=0,width=0,height=0]"
parent = null
elem = {javax.swing.text.DefaultStyledDocument$SectionElement@2328}"BranchElement(section) 0,35\n"
注意 parent = null 和 nchildren = 0。这意味着那里没有什么真正有用的东西。我可以通过调用来拼凑一些东西JTextPane.getUI().paint
,但是文本窗格需要是可见的,这感觉是错误的做法。
有没有办法在不渲染实际 JTextPane 的情况下获得 RTF 内容的可视化表示?