我在文本编辑器程序中创建了一个类型为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)
答案 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);