将RTF加载到JTextPane中

时间:2015-04-08 19:56:19

标签: java rtf jtextpane fileinputstream

我在文本编辑器程序中创建了一个类型为JTextPane的类。它有一个text和richtext的子类,来自我的主JTextPaneClass的inherts。但是,我无法将RTF加载到我的richtext中,因为读取fileinput流的方法不在超类JTextPane中。那么如何将富文本读入jtextpane呢?这似乎很简单,我一定是缺少一些东西。我看到很多使用RTFEditorKit并填充到JTextPane中的示例,但是当它实例化为类时没有。

public class RichTextEditor extends TextEditorPane {

private final String extension = ".rtf";
private final String filetype = "text/richtext";

public RichTextEditor() {
    // super( null, "", "Untitled", null );
    super();
    // this.setContentType( "text/richtext" );
}

/**
 * Constructor for tabs with content.
 * 
 * @param stream
 * @param path
 * @param fileName
 * @param color
 */
public RichTextEditor( FileInputStream stream, String path, String fileName, Color color, boolean saveEligible ) {
    super( path, fileName, color, saveEligible );
    super.getScrollableTracksViewportWidth();
    //RTFEditorKit rtf = new RTFEditorKit();
    //this.setEditorKit( rtf );
    setEditor();
    this.read(stream, this.getDocument(), 0);
    //this.read( stream, "RTFEditorKit" );
    this.getDocument().putProperty( "file name", fileName );
}



private void setEditor() {
    this.setEditorKit( new RTFEditorKit() );

}

行:

this.read(stream, this.getDocument(), 0);

告诉我

  

JEditorPane类型中的read(InputStream,Document)方法不适用于参数(FileInputStream,Document,int)

2 个答案:

答案 0 :(得分:1)

为了能够访问您的编辑器套件,您应该保留对它的引用。实际上,您的setEditor()方法的名称是setXXX,所以这应该是一个setter(事实上,我不相信您需要多次设置它,所以可能这个方法应该是根本不存在)。定义一个字段:

private RTFEditorKit kit = new RTFEditorKit();

然后在构造函数中,

setEditorKit( kit );
kit.read(...);

如果您坚持保留该方法,其代码应为

kit = new RTFEditorKit();
setEditorKit( kit );

如果你在构造函数中使用它,请记住最初将kit设置为void,以免创建一个将立即丢弃的额外对象。

答案 1 :(得分:1)

我一直在寻找一个用于将RTF文档加载到JTextPane的java实现。除了这个帖子,我找不到别的东西。因此,我将在此处发布我的解决方案,以防其他开发人员:

            private static final RTFEditorKit RTF_KIT = new RTFEditorKit();
            (...)
            _txtHelp.setContentType("text/rtf");
            final InputStream inputStream = new FileInputStream(_helpFile);
            final DefaultStyledDocument styledDocument = new DefaultStyledDocument(new StyleContext());
            RTF_KIT.read(inputStream, styledDocument, 0);
            _txtHelp.setDocument(styledDocument);