1

だから、私は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)

ライターを介して、しかし結果は同じでした。

理想的には、次の2つのことができるようにしたいと思います。

  1. 生のテキストのみを保存し、スタイルは使用せず、プレーンテキストファイルに保存します。
  2. 色などを維持するために、コンテンツ全体をhtmlとして保存しますが、コンテンツはそこにあります。

では、JTextPaneの実際のコンテンツを見つけるには、何を調べる必要がありますか?(スタイルの有無にかかわらず)

4

2 に答える 2

2

co_LoggerEdit.getText()または使用できます

co_LoggerEdit.getDocument().getText(0, co_LoggerEdit.getDocument().getLength());
于 2011-06-29T13:24:25.107 に答える
1

私があなたの立場ならJTextPane、ログのプレーンテキストを保存し、対応する色でレンダリングする を含む独自のコンポーネントを作成します。これがモジュラー方式になります。

次に、それを保存するには、保存された (生の) テキストをファイルに書き込むだけです。

また、スタイルの保存について心配する必要はありません。ログの唯一の重要な部分は contentです。
ログ ビューアは、さまざまな色を (特に) 使用して、ログの内容を見やすくすることができます。

于 2011-06-29T13:26:45.403 に答える