JTextPane - где находится контент? - PullRequest
1 голос
/ 29 июня 2011

Итак, у меня есть JTextPane

co_LoggerEdit = new JTextPane();
co_LoggerEdit.setContentType("text/html");

Затем я сохраняю документ и стиль таким образом:

co_LogDoc = co_LoggerEdit.getStyledDocument();
co_LogStyle = co_LoggerEdit.addStyle("style", null);

Затем я добавляю текст в журнал с помощью этой процедуры:

StyleConstants.setForeground(co_LogStyle, col); // col == Color parameter
try { co_LogDoc.insertString(co_LogDoc.getLength(), text, co_LogStyle); }
catch (BadLocationException e) { System.err.println("Caught IOException: " + e.getMessage()); }

Все это прекрасно работает, и на экране я вижу журнал в различных цветах и ​​записях.

Проблема возникает, когда я хочу сохранить эти данные в файл. В настоящее время у меня есть это:

public void me_SaveLogToFile(String filename)
{
    StyledDocument doc = (StyledDocument)co_LoggerEdit.getDocument();
    HTMLEditorKit kit = new HTMLEditorKit();
    BufferedOutputStream out;

    try 
    {
        out = new BufferedOutputStream(new FileOutputStream(filename));
        kit.write(out, doc, doc.getStartPosition().getOffset(), doc.getLength());
    } 
    catch (Exception e) 
    {
        cLogger cl_Logger = cLogger.getInstance();
        cl_Logger.me_AddLog("ERROR: Save To File Failed", cLogger.LOG_TYPE.LOG_TYPE_ERROR, cLogger.LOG_LEVEL.LOG_LEVEL_NONE);
    }
}

И, хотя он создает файл, его содержимое показывает только стиль HTML, но не фактическое содержимое. Например.

<html>
  <head>
    <style type="text/css">
      <!--
        style { color: #000000 }
      -->
    </style>

  </head>
  <body>
    <p style="margin-top: 0">
      <font color="#808080"><style>
      </font><font color="#00ff00"><style>
      </font><font color="#000000"><style>
</font>    </p>
    <p style="margin-top: 0">
      <font color="#808080"><style>
      </font><font color="#ffffff"><style>
      </font><font color="#000000"><style>
</font>    </p>
  </body>
</html>

Итак, что мне нужно сделать, чтобы иметь доступ к реальному содержимому JTestPane, а не только к стилю?

Я также пытался просто использовать:

co_LoggerEdit.write(out)

через писателя, но результат был тот же.

В идеале я бы хотел сделать две вещи:

  1. Сохранение только необработанного текста без стиля в текстовом файле.
  2. Сохраняйте все содержимое в виде HTML, чтобы сохранить цвет и т. Д., Но с содержимым там!

Итак, на что мне нужно обратить внимание, чтобы найти фактическое содержимое JTextPane? (со стилем или без)

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы можете использовать co_LoggerEdit.getText() или

co_LoggerEdit.getDocument().getText(0, co_LoggerEdit.getDocument().getLength());
1 голос
/ 29 июня 2011

Если бы я был на вашем месте, я бы создал свой собственный компонент, содержащий JTextPane, в котором хранится простой текст журнала и отображается соответствующий цвет.Это будет модульный способ.

Затем, чтобы сохранить его, вам нужно только записать сохраненный (необработанный) текст в файл.

И, не беспокойтесь о сохранении стиля, единственная важная часть журнала - это содержимое .
Программа просмотра журнала может использовать различные цвета (помимо прочего)облегчить просмотр содержимого журнала.

...