Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > RTFEditorKit что это и как этим пользоваться?


Автор: Metal_Heart 4.8.2005, 14:13
После длительного перерыва вновь возвращаюсь к так мне полюбившейся ЯВЕ.
Поставил себе цель - сделать редактор с подсветкой синтаксиса. Да, многие тут уже это делали, но в отличие от них я ещё в самом начале пути и столкнулся с очень простой проблемой:

я думал, что RTFEditorKit это компонент вроде JTextArea, но оказалось что не совсем.

Потому, вопрос - что это такое и как им пользоваться.

Очень прошу - только по русски, ну не владею я английским smile
Добавлено @ 14:19
а примеры можно и не по русски smile

Автор: LSD 4.8.2005, 16:18
RTFEditorKit это класс для создания javax.swing.text.Document из файла содержащего текст в формате RTF. Сам javax.swing.text.Document может быть отображен в JTextArea, а потом записан обратно в файл с помощью того-же RTFEditorKit.
Он сам по себе довольно простой, read(InputStream, Document, int) читать, write(OutputStream, Document, int, int) писать.

Автор: Metal_Heart 5.8.2005, 11:39
LSD, большое спасибо, вот набросал примерчик, который читает уже сформированный RTF-файлик, но шрифты, почему-то отображаются без цвета, жирности и курсива (да к тому же без кирилицы).

Что нужно указать, чтоб файлик отображался также как и исходный:
Цитата

test test test test



основная часть исходника:
Код

  RTFEditorKit  rtf  = new RTFEditorKit();
  JTextArea     text = new JTextArea();
  Document      doc;
  InputStream   in;

....
 
 in = new FileInputStream("test.rtf");
 doc = new RTFEditorKit().createDefaultDocument();
 rtf.read(in, doc, 0);
 text.setDocument(doc);


Автор: igon 5.8.2005, 12:17
Цитата
почему-то отображаются без цвета, жирности и курсива

Цитата
A JTextArea is a multi-line area that displays plain text.

Попробуй вместо JTextArea JEditorPane

Автор: Metal_Heart 5.8.2005, 13:34
не прошло, видать дело ещёи в настройках самого Document

ни у кого идей нету больше?

Автор: igon 6.8.2005, 06:07
Цитата
ни у кого идей нету больше?

А RTFEditorKit использовать всенепременно? smile



Автор: LSD 6.8.2005, 10:08
По умолчанию JEditorPane отображает только plain текст. Чтобы этого избежать надо правильно установить для него тип контента:
Код
RTFEditorKit rtf = new RTFEditorKit();
JEditorPane editorPane = new JEditorPane("text/rtf","");
Document doc = rtf.createDefaultDocument();
InputStream in = new FileInputStream("ABCD.rtf");
rtf.read(in, doc, 0);
editorPane.setDocument(doc);
    
JFrame frame = new JFrame();
frame.getContentPane().add(editorPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

Автор: Metal_Heart 9.8.2005, 09:45
LSD и снова СПАСИБО!
Да, дело было в:
Код

JEditorPane editorPane = new JEditorPane("text/rtf","");


igon, а чем тебе RTFEditorKit не угодил?

Я просто хочу знать как он (т.е. RTFEditorKit) работает

Автор: igon 10.8.2005, 10:37
Цитата
igon, а чем тебе RTFEditorKit не угодил?
ИМХО, нет необходимости использовать его явно: он будет выбран по умолчанию, если у JEditorPane content type="text/rtf". Т.е. сработает и
Код

package Test;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JEditorPane;
import javax.swing.JFrame;

public class RTF_EditorPane 
  {
    public RTF_EditorPane()
      {
        JEditorPane editorPane = new JEditorPane();
        editorPane.setContentType("text/rtf");
        try
          {
            InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Test\\RTF_EditorPane\\test.rtf"),"windows-1251");
            BufferedReader in = new BufferedReader(isr);
            editorPane.read(in, null);
          }
          catch (FileNotFoundException e)
            {}
          catch (IOException e)
            {}
        JFrame frame = new JFrame();
        frame.getContentPane().add(editorPane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     }

     public static void main(String[] args)
     {
          RTF_EditorPane rtf_EditorPane = new RTF_EditorPane();
     }
}

Автор: Metal_Heart 10.8.2005, 11:04
igon, будь добр, поставь плюсик LSD, а то я пока не могу.
Оба его поста очень просты - и в самую точку!

Автор: LSD 10.8.2005, 14:37
Цитата(Metal_Heart @ 10.8.2005, 12:04)
igon, будь добр, поставь плюсик LSD, а то я пока не могу.

Спасибо, но не стоит, Lamer George уже сделал это. Два плюса за одно и тоже это уже перебор smile

Автор: Metal_Heart 10.8.2005, 15:52
Цитата

Спасибо, но не стоит, Lamer George уже сделал это. Два плюса за одно и тоже это уже перебор smile


не знал..

Автор: Hidrag 4.6.2007, 13:42
Пытаюсь вытащить rtf файл из ресурса и вывести его в EditorPane, все ок, но выходят одни кракозябры вместо русского текста, как исправить?

Пробывал обоими указанными вариантами, остановился на:
Код

            InputStreamReader isr = new InputStreamReader(ClassLoader.getSystemResourceAsStream("resources/help.rtf"),"windows-1251");
            BufferedReader in = new BufferedReader(isr);
            helpPane.read(in, null);



вроде указываю что "windows-1251" а не помогает... текст ртфки набирал в ворде 2003.

Автор: LSD 4.6.2007, 16:59
Hidrag, зачем ты используешь Reader? Просто используй InputStream и все.

Автор: Hidrag 4.6.2007, 22:42
все равно закарючки :(
я уже не знаю на что свалить, может в офисе свой формат RTF или то что винда англицкая а офис русский...

Автор: LSD 5.6.2007, 13:51
Выложи сюда свой RTF.

Автор: Hidrag 5.6.2007, 14:08
Выкладываю smile 

Автор: Hidrag 5.6.2007, 17:00
Проблема решилась! В русской винде выводит по русски, в англицкой - закарючками...

вот только как в англицкой винде по русски вывести вот это осталось непонятным

Решение нашел!!! Во всем виноват микрософт ворд! Создал ртф в  Google Docs&Spreadsheets и все вывелось по русски!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)