JTextPane - 内容在哪里?
Posted
技术标签:
【中文标题】JTextPane - 内容在哪里?【英文标题】:JTextPane - Where is the content? 【发布时间】:2011-06-29 13:19:15 【问题描述】:所以,我有一个 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)
通过作家,但结果是一样的。
理想情况下,我希望能够做两件事:
-
仅将原始文本保存到纯文本文件中,没有样式。
将完整内容保存为 html 以保留颜色等,但其中包含内容!
那么,我需要查看哪些内容才能找到 JTextPane 的实际内容? (有或没有风格)
【问题讨论】:
【参考方案1】:您可以使用co_LoggerEdit.getText()
或
co_LoggerEdit.getDocument().getText(0, co_LoggerEdit.getDocument().getLength());
【讨论】:
您的第二位允许我获取日志的原始内容,非常感谢。有没有办法获得完整的输出?即 html 和内容?即保存日志的网页? (问题的第 2 部分?) 我认为 co_LoggerEdit.getText() 应该返回带有文本的 HTML。不确定它如何与样式一起使用。你能发布一个 SSCCE 来测试吗? SSCCE 这里:sleeping-dragons.co.uk/Indy.zip 我试图将我的代码归结为基础。主窗体有三个按钮来测试我目前拥有的三个不同例程的输出。 这不是 SSCCE。其中一个 S 表示“短”。我不想运行并浏览您的所有项目文件。我只需要一个简单的(少于 50 行代码)示例。理想情况下,将在此处发布一堂课。所以这里的任何人都可以拿着它跑。【参考方案2】:如果我在你的立场上,我会制作包含JTextPane
的自己的组件,它存储日志的纯 文本并用相应的颜色呈现它。这将是模块化方式。
然后,要保存它,您只需将存储的(原始)文本写入文件即可。
而且,不用担心保存样式,日志唯一重要的部分就是内容。 日志查看器可以使用不同的颜色(除其他外)来简化日志内容的查看。
【讨论】:
co_LoggerEdit.getText() 仅返回样式的 HTML,但未列出日志的实际内容。即结果和我上面列出的HTML一样。 嗯,有趣。我从来没有遇到过这个问题。将我的答案恢复为另一种选择。以上是关于JTextPane - 内容在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
将 JTextPane 设置为内容类型 HTML 并使用字符串构建器
如何正确打印出带有“text/rtf”内容的 JTextPane 的硬拷贝?