2015-04-08 2 views
1

Я создал класс типа JTextPane в моей программе текстового редактора. он имеет подкласс текста и richtext, который наследуется от моего основного JTextPaneClass. Тем не менее, я не могу загрузить RTF в свой богатый текст, потому что метод чтения потока fileinput не находится в суперклассе JTextPane. Итак, как мне читать богатый текст в jtextpane? Это кажется очень простым, я должен что-то упустить. Я вижу множество примеров, используя RTFEditorKit и заполняя JTextPane, но не тогда, когда он был создан как класс.загрузить RTF в 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); 

говорит мне

Метод чтения (InputStream, Document) в типе JEditorPane не применяется для аргументов (FileInputStream, Document, целое)

+0

Что делает это '0'? – RealSkeptic

+0

pos Местоположение в документе для размещения контента. – KiloJKilo

+0

Но где вы получили это определение 'read'? Это не от JEditorPane. И вы его не переопределили. Почему, по вашему мнению, у него должен быть метод с тремя параметрами с именем 'read()'? – RealSkeptic

ответ

1

Чтобы иметь доступ к вашему набору редакторов, вы должны ссылку на него. Фактически, ваше имя setEditor() равно setXXX, поэтому это должен быть сеттер (на самом деле, я не уверен, что вам нужно установить его более одного раза, поэтому может быть, что этот метод вообще не должен существовать). Определение поля:

private RTFEditorKit kit = new RTFEditorKit(); 

Затем в конструкторе,

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

Если вы настаиваете на сохранении метода, его код должен быть

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

И если вы используете это из конструктора , не забудьте сначала установить kit на void, чтобы не создавать дополнительный объект, который будет немедленно удален.

1

Я искал реализацию java для загрузки RTF-документа в JTextPane. Помимо этой темы я ничего не мог найти. Таким образом, я опубликую здесь свое решение, если это поможет другим разработчикам:

  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); 
Смежные вопросы