だから、私は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つのことができるようにしたいと思います。
- 生のテキストのみを保存し、スタイルは使用せず、プレーンテキストファイルに保存します。
- 色などを維持するために、コンテンツ全体をhtmlとして保存しますが、コンテンツはそこにあります。
では、JTextPaneの実際のコンテンツを見つけるには、何を調べる必要がありますか?(スタイルの有無にかかわらず)