jtextpane 相关问题

Java Swing文本组件,可以使用以图形方式表示的属性进行标记。

显示base64编码的图像

我在将图像集成到文本/html JTextPane 时遇到问题。 JTextPane 使用以下文本初始化: ...</desc> <question vote="2"> <p>我在将图像集成到文本/html JTextPane 时遇到问题。 JTextPane 使用以下文本初始化:</p> <pre><code>&lt;html&gt; &lt;head&gt; &lt;style type=&#34;text/css&#34;&gt; &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;/body&gt; &lt;/html&gt; </code></pre> <p>我插入文本:</p> <pre><code>kit.insertHTML(doc, doc.getLength(), &#34;&lt;b&gt;&#34; + string + &#34;&lt;/b&gt;&lt;br&gt;&#34; , 0, 0, HTML.Tag.B); </code></pre> <p>以这种方式插入的所有文本都可以正确显示,但是当我尝试使用以下命令插入 Base64 编码的图像时:</p> <pre><code>kit.insertHTML(doc,doc.getLength(), &#34;&lt;img src=\&#34;data:image/jpeg;base64,&#34; + base64Code + &#34;\&#34;/&gt;&#34;, 0, 0, HTML.Tag.IMG); </code></pre> <p>我只得到了一张占位符图像。当尝试使用正常的源路径时,它起作用了。然而,在线获取 Base64 代码并使用它也为我提供了一个占位符图像,而完全相同的代码也适用于 w3school.com 的 HTML tryit 编辑器。</p> </question> <answer tick="true" vote="6"> <p>当<a href="https://docs.oracle.com/javase/7/docs/api/javax/swing/JTextPane.html" rel="noreferrer"><pre><code>JTextPane</code></pre></a>看到<pre><code>&lt;img&gt;</code></pre>标签时,它会检查缓存中是否存在该图像,如果不存在,它将尝试从url中读取图像。 <pre><code>JTextPane</code></pre>使用的html库不支持<pre><code>&lt;img&gt;</code></pre>标签中的base64编码图像数据,因此我们需要以不同的方式进行操作。</p> <p>原来我们可以手动将图片添加到图片缓存中。这可以用来选择一些无效的网址并为其分配一个图像。</p> <hr/> <p>让我们将图像添加到缓存中并在 <pre><code>JTextPane</code></pre> 中显示它!</p> <p>首先您要将图像转换为<a href="https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html" rel="noreferrer"><pre><code>BufferedImage</code></pre></a>。这可以使用 <a href="https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html" rel="noreferrer"><pre><code>ImageIO</code></pre></a> 类来完成。</p> <pre><code>byte[] imgBytes = decodeBase64(base64Code); BufferedImage img = ImageIO.read(new ByteArrayInputStream(imgBytes)); </code></pre> <p>请注意,这里我们需要原始图像字节,而不是 Base64 编码。如果您正在从文件中读取图像,则可以将 <a href="https://docs.oracle.com/javase/7/docs/api/java/io/File.html" rel="noreferrer"><pre><code>File</code></pre></a> 传递给 <pre><code>read</code></pre> 函数而不是输入流。</p> <hr/> <p>现在我们有了 <pre><code>BufferedImage</code></pre> 图像,我们可以编写一个函数将其添加到缓存中。</p> <pre><code>@SuppressWarnings({ &#34;rawtypes&#34;, &#34;unchecked&#34; }) public static String saveImageToCache(JTextPane pane, BufferedImage img, String name) throws MalformedURLException { Dictionary cache = (Dictionary) pane.getDocument().getProperty(&#34;imageCache&#34;); if (cache == null) { // No cache exists, so create a new one. cache = new Hashtable(); pane.getDocument().putProperty(&#34;imageCache&#34;, cache); } String url = &#34;http:\\buffered/&#34; + name; cache.put(new URL(url), img); return url; } </code></pre> <p>请注意,我在 <pre><code>Dictionary</code></pre> 和 <pre><code>Hashtable</code></pre> 上取消了一些有关类型参数的警告。通常应该避免这种情况,但在这种情况下,我们正在以可以抑制警告的方式处理 Swing 废话。</p> <p>此方法本质上是选择一些无效的 url 并将图像存储在该 url 中。</p> <p>注意 <pre><code>name</code></pre> 参数。这将是 url 的一部分,如果您尝试将与前一张图像同名的图像存储到缓存中,这将替换前一张图像。避免在此名称中使用疯狂的字符,因为如果不是有效的 url,<pre><code>new Url(url)</code></pre> 可能会抛出 <a href="https://docs.oracle.com/javase/7/docs/api/java/net/MalformedURLException.html" rel="noreferrer"><pre><code>MalformedURLException</code></pre></a>。</p> <hr/> <p>我们现在可以将它与 <a href="https://docs.oracle.com/javase/7/docs/api/javax/swing/JTextPane.html" rel="noreferrer"><pre><code>JTextPane</code></pre></a>一起使用。</p> <pre><code>BufferedImage img = ...; JTextPane pane = new JTextPane(); pane.setContentType(&#34;text/html&#34;); String url = saveImageToCache(pane, img, &#34;image1&#34;); pane.setText(&#34;&lt;html&gt;&lt;body&gt;&lt;img src=\&#34;&#34; + url + &#34;\&#34;&gt;&lt;/body&gt;&lt;/html&gt;&#34;); JFrame frame = new JFrame(&#34;image test&#34;); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(pane); frame.setSize(img.getWidth(), img.getHeight()); frame.setLocationRelativeTo(null); frame.setVisible(true); </code></pre> <p>请注意,在将图像添加到缓存之前,您必须调用 <pre><code>setContentType</code></pre>,因为该方法会清除缓存。此外,在调用 <pre><code>setText</code></pre> 之前将图像添加到缓存中非常重要,以确保在 swing 需要图像之前添加图像。</p> <p>如果通过使用具有先前已知名称的 <pre><code>saveImageToCache</code></pre> 来更改缓存中的图像,您将需要以某种方式更新 <pre><code>JTextPane</code></pre>,例如调用 <pre><code>setText</code></pre>。</p> <hr/> <p>如果您有大量图像,您可能希望在不再需要它们时将它们从缓存中删除,以避免过多的内存使用。一种方法是定义一个如下所示的函数,该函数从缓存中删除图像。</p> <pre><code>@SuppressWarnings({ &#34;rawtypes&#34; }) public static void removeImageFromCache(JTextPane pane, String name) throws MalformedURLException { Dictionary cache = (Dictionary) pane.getDocument().getProperty(&#34;imageCache&#34;); if (cache == null) { // There is no cache, so the image is not in the cache. return; } String url = &#34;http:\\buffered/&#34; + name; cache.remove(new URL(url)); } </code></pre> <p>您还可以通过调用 <pre><code>setContentType</code></pre> 或用新对象替换 <pre><code>JTextPane</code></pre> 来清除缓存。这是因为缓存存储在 <pre><code>JTextPane</code></pre> 中。</p> </answer> <answer tick="false" vote="0"> <p>由于 JTextPane 可以很好地管理从 Web-Url 粘贴图像,因此它还可以管理图像的缓存。实际问题是 Java 不支持数据 URL。一旦支持,就会显示并缓存嵌入的图像。</p> <p>持久解决方案需要三件事:</p> <ul> <li>数据流协议处理程序</li> <li>数据 URL 连接</li> <li>协议处理程序与类的集成 <pre><code>java.net.URL</code></pre></li> </ul> <p><b>编辑</b> <a href="https://stackoverflow.com/a/78006445/9437799">https://stackoverflow.com/a/78006445/9437799</a></p> </answer> </body></html>

回答 0 投票 0

将滚动窗格设置为文本窗格

下面是我的代码,它向框架添加了一些摆动组件。我使用两个文本窗格并为两者设置一些文本。但是文本很大,当我运行代码时只有文本窗格可见。所以我试图......

回答 2 投票 0

使用 HTMLEditorKit 将 JTextPane 的内容写入剪贴板,不同颜色元素之间没有额外的空格

我在 Swing 中为我自己的编程语言构建了一个自定义语法高亮器 gui。我正在编写一个功能,将选定的文本复制到剪贴板,这样我就可以轻松粘贴我的自定义语法

回答 1 投票 0

如何在 javaForm 中附加一个 jTextPane?

我有这段代码适用于带附加功能的 jTextArea。 但是我想使用 jTextPane 但附加不存在。 有人可以帮我选择吗? public void ShowText(String men...

回答 0 投票 0

如何在 JTextPane 中实现自动换行,如何让它在没有空格的情况下换行?

JTextPane 中的自动换行到底是如何实现的? 我试图准确理解它是如何工作的,以便我可以修改行为。现在,如果我在 JScrollPa 中有一个标准的 JTextPane ...

回答 1 投票 0

在JTextPane中保存Java字体

作为使用javax.swing学习Java GUI编程的一部分,我打算用Font保存JTextPane的内容,有什么办法吗?

回答 1 投票 0

JTextPane(Swing)中溢出unicode字符的问题。

我想使用unicode字符来可视化扑克游戏中的扑克牌。我在JTextPane中把它们打印在不同的行上。正如你在第一张图上看到的,它们往往会溢出到其他行......

回答 1 投票 0

如何使用javax.swing.text.AsyncBoxView将JTextPane中的文本布局委托给一个非EDT线程?

我已经达到了JTextPane的性能极限,同时试图实现一个控制台风格的组件。在大多数情况下,我的控制台表现得相当好,但试图用大量的非 ...

回答 1 投票 3

如何在JTextPane上添加不同颜色的文字?

谁能帮我用简单的日志,我必须在JTextPane日志消息的第一行添加选择的颜色(绿色确定,红色失败)。如何实现这个功能?

回答 3 投票 14

JTextPane动态缩进!!!情况

我尝试动态更新Jtextpane中的左缩进。但是我不能!这是我尝试过的! DefaultStyledDocument文档=(DefaultStyledDocument)textpane.getDocument();元素element = ...

回答 1 投票 0

JTextPane和UndoManager

为了学习Java中的GUI编程,我正在使用Java开发TextEditor。我在编辑器中添加了撤消重做功能以及字体选项。撤消重做功能可以工作...

回答 1 投票 0

JTextPane + JScrollPane +自动换行?

基于现有的解决方案,我还没有找到一种方法来使JTextPane(或JEditorPane)在JScrollPane内部具有自动换行或自动换行。 JTextArea不是解决方案,因为我需要HTML来...

回答 2 投票 5

在单击按钮时禁用对JTextPane的编辑(Java)

好的,所以我正在制作一个简单的程序,根据单击相应的按钮,将编辑JTextPane的能力设置为true或false。但是,我不知道如何禁用和重新启用...

回答 1 投票 1

我如果陈述不起作用,我无法找出原因? “ if(y ==“ 0”)” [重复]

这是我的代码,我的方法假定返回true,我尝试使用jtextarea获得2行。 “ if(y ==” 0“)”在我看来很好,我尝试了charat并且它不起作用。有人知道如何解决吗? ...

回答 1 投票 0

Java Swing JTextPane文本/ html不遵循禁用的属性

我正在尝试在JTextPane中显示一个简单的HTML页面。该页面具有输入复选框/无线电元素,但需要将其禁用。但是,显示页面时,复选框和单选按钮...

回答 1 投票 0

JTextPane无法呈现串联的HMTL字符串

如果我们使用带有HTML标签的String设置JTextPane的文本,它将返回带有HTML文档标签的文本。 jtextPane.setEditorKit(new HTMLEditorKit());字符串setHTMLText =“我是一个字符串...

回答 1 投票 0

如何通过DocumentFilter和样式来修复Java swing jtextpane中的自动换行问题?

对于个人项目,需要为用户提供一个简单的IDE,并在Java swing中突出显示语法。我正在使用插入jScrollPane中的jTextPane,因为此组件可以使用很多...

回答 1 投票 0

如何设置的JTextPane的宽度,并使用文本相关的自动高度?

我已经找到这个话题,但遗憾的是它不工作。我所试图做的事:我与开发的Java Swing的帮助下,小工具。对于我的工具的一些功能我想显示自...

回答 1 投票 0

JTextPane中如何设置标文本?

我在JTextPane中键入文本(它会在MS / Word文档后转换),但我不知道如何设置标几句话。到目前为止,我的测试代码工作得很好。我可以specfified ...

回答 2 投票 0

的JTextPane和撤消管理风格的改变

我的情况:我有自己的语法高亮JTextPane中。我有它设置,这样,当用户停止打字,它使用setCharacterAttributes()方法更新的文字样式。我的...

回答 1 投票 2

© www.soinside.com 2019 - 2024. All rights reserved.