所以,我有一个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)
通过作家,但结果是一样的。
理想情况下,我希望能够做两件事:
那么,我需要查看什么才能找到JTextPane的实际内容? (有或没有风格)
答案 0 :(得分:2)
您可以使用co_LoggerEdit.getText()
或
co_LoggerEdit.getDocument().getText(0, co_LoggerEdit.getDocument().getLength());
答案 1 :(得分:1)
如果我在你的鞋子上,我会创建一个包含JTextPane
的组件,它存储日志的 plain 文本并使用相应的颜色呈现它。这将是模块化的方式。
然后,要保存它,您只需将存储的(原始)文本写入文件。
并且,不要担心保存样式,日志中唯一重要的部分是内容。
日志查看器可以使用不同的颜色(以及其他内容)来简化日志内容的查看。