`

关于JTextPane读取RTF多出一行的问题

阅读更多

代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.StyleContext;
import javax.swing.text.rtf.RTFEditorKit;

public class Test {
	public static void main(String[] args) {
		InputStream in = null;
		try {
			in = new FileInputStream("bbb.rtf");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		DefaultStyledDocument doc = new DefaultStyledDocument(new StyleContext());
		RTFEditorKit kit = new RTFEditorKit();
		try {
			kit.read(in, doc, 0);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
		
		System.out.println("Reading, Doc length = " + doc.getLength());

		JFrame jframe = new JFrame();
		JTextPane jtp = new JTextPane();
		
		jtp.setDocument(doc);
		jframe.add(jtp);
		jframe.setSize(400, 200);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe.setVisible(true);
	}
}

 结果在JTextPane中显示比rtf文档中末尾多了一个回车,经研究发现是由于setDocument方法引起的。


 

其方法说明是 Associates the editor with a text document. This must be a StyledDocument .

我想是Associates的缘故吧,document本身末尾含回车,JTextPane中也是有回车的,因此组合一起就多了一个回车,但是如何解决这个问题呢?

 

2009.11.11 14:38编辑添加:

保证不多出换行的一个权宜办法:

try {
    jtp.getDocument().insertString(0, doc.getText(0, doc.getLength() - 1), null);
} catch (BadLocationException e) {
    e.printStackTrace();
}

 此段用来替换

jtp.setDocument(doc);

至于insertString之后的文字无格式,可以通过构造insertString方法的第三参数AttributeSet来添加,此处为null,例如:

SimpleAttributeSet attrset = new SimpleAttributeSet();
StyleConstants.setForeground(attrset, Color.red);
StyleConstants.setUnderline(attrset, true);
StyleConstants.setItalic(attrset, true);
StyleConstants.setFontSize(attrset, 24);

 至于其与原先doc的格式关联,还未找到。

 

 

  • 大小: 6.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics