Java Swing文本组件,可以使用以图形方式表示的属性进行标记。
JTextPane/JEditorPane 显示 HTML <!--comment-->
我正在使用 Java (21) Swing JEditorPane 或 JTextPane 来显示 HTML 字符串。这可以工作,但会显示 HTML 注释。 。 JEditorPane htmlpane = new JEditorPane(); ...
我有一个带有 Netbeans 的文本编辑器,我可以将文本加载到 JtextPane 中。如果文本太大,您可以借助水平滚动条来阅读。有什么方法可以将文本分成 24 行的页面...
我在将图像集成到文本/html JTextPane 时遇到问题。 JTextPane 使用以下文本初始化: ...</desc> <question vote="2"> <p>我在将图像集成到文本/html JTextPane 时遇到问题。 JTextPane 使用以下文本初始化:</p> <pre><code><html> <head> <style type="text/css"> </style> </head> <body> </body> </html> </code></pre> <p>我插入文本:</p> <pre><code>kit.insertHTML(doc, doc.getLength(), "<b>" + string + "</b><br>" , 0, 0, HTML.Tag.B); </code></pre> <p>以这种方式插入的所有文本都可以正确显示,但是当我尝试使用以下命令插入 Base64 编码的图像时:</p> <pre><code>kit.insertHTML(doc,doc.getLength(), "<img src=\"data:image/jpeg;base64," + base64Code + "\"/>", 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><img></code></pre>标签时,它会检查缓存中是否存在该图像,如果不存在,它将尝试从url中读取图像。 <pre><code>JTextPane</code></pre>使用的html库不支持<pre><code><img></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({ "rawtypes", "unchecked" }) public static String saveImageToCache(JTextPane pane, BufferedImage img, String name) throws MalformedURLException { Dictionary cache = (Dictionary) pane.getDocument().getProperty("imageCache"); if (cache == null) { // No cache exists, so create a new one. cache = new Hashtable(); pane.getDocument().putProperty("imageCache", cache); } String url = "http:\\buffered/" + 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("text/html"); String url = saveImageToCache(pane, img, "image1"); pane.setText("<html><body><img src=\"" + url + "\"></body></html>"); JFrame frame = new JFrame("image test"); 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({ "rawtypes" }) public static void removeImageFromCache(JTextPane pane, String name) throws MalformedURLException { Dictionary cache = (Dictionary) pane.getDocument().getProperty("imageCache"); if (cache == null) { // There is no cache, so the image is not in the cache. return; } String url = "http:\\buffered/" + 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>
下面是我的代码,它向框架添加了一些摆动组件。我使用两个文本窗格并为两者设置一些文本。但是文本很大,当我运行代码时只有文本窗格可见。所以我试图......
使用 HTMLEditorKit 将 JTextPane 的内容写入剪贴板,不同颜色元素之间没有额外的空格
我在 Swing 中为我自己的编程语言构建了一个自定义语法高亮器 gui。我正在编写一个功能,将选定的文本复制到剪贴板,这样我就可以轻松粘贴我的自定义语法
我有这段代码适用于带附加功能的 jTextArea。 但是我想使用 jTextPane 但附加不存在。 有人可以帮我选择吗? public void ShowText(String men...
如何在 JTextPane 中实现自动换行,如何让它在没有空格的情况下换行?
JTextPane 中的自动换行到底是如何实现的? 我试图准确理解它是如何工作的,以便我可以修改行为。现在,如果我在 JScrollPa 中有一个标准的 JTextPane ...
作为使用javax.swing学习Java GUI编程的一部分,我打算用Font保存JTextPane的内容,有什么办法吗?
JTextPane(Swing)中溢出unicode字符的问题。
我想使用unicode字符来可视化扑克游戏中的扑克牌。我在JTextPane中把它们打印在不同的行上。正如你在第一张图上看到的,它们往往会溢出到其他行......
如何使用javax.swing.text.AsyncBoxView将JTextPane中的文本布局委托给一个非EDT线程?
我已经达到了JTextPane的性能极限,同时试图实现一个控制台风格的组件。在大多数情况下,我的控制台表现得相当好,但试图用大量的非 ...
谁能帮我用简单的日志,我必须在JTextPane日志消息的第一行添加选择的颜色(绿色确定,红色失败)。如何实现这个功能?
我尝试动态更新Jtextpane中的左缩进。但是我不能!这是我尝试过的! DefaultStyledDocument文档=(DefaultStyledDocument)textpane.getDocument();元素element = ...
为了学习Java中的GUI编程,我正在使用Java开发TextEditor。我在编辑器中添加了撤消重做功能以及字体选项。撤消重做功能可以工作...
JTextPane + JScrollPane +自动换行?
基于现有的解决方案,我还没有找到一种方法来使JTextPane(或JEditorPane)在JScrollPane内部具有自动换行或自动换行。 JTextArea不是解决方案,因为我需要HTML来...
好的,所以我正在制作一个简单的程序,根据单击相应的按钮,将编辑JTextPane的能力设置为true或false。但是,我不知道如何禁用和重新启用...
我如果陈述不起作用,我无法找出原因? “ if(y ==“ 0”)” [重复]
这是我的代码,我的方法假定返回true,我尝试使用jtextarea获得2行。 “ if(y ==” 0“)”在我看来很好,我尝试了charat并且它不起作用。有人知道如何解决吗? ...
Java Swing JTextPane文本/ html不遵循禁用的属性
我正在尝试在JTextPane中显示一个简单的HTML页面。该页面具有输入复选框/无线电元素,但需要将其禁用。但是,显示页面时,复选框和单选按钮...
如果我们使用带有HTML标签的String设置JTextPane的文本,它将返回带有HTML文档标签的文本。 jtextPane.setEditorKit(new HTMLEditorKit());字符串setHTMLText =“我是一个字符串...
如何通过DocumentFilter和样式来修复Java swing jtextpane中的自动换行问题?
对于个人项目,需要为用户提供一个简单的IDE,并在Java swing中突出显示语法。我正在使用插入jScrollPane中的jTextPane,因为此组件可以使用很多...
如何设置的JTextPane的宽度,并使用文本相关的自动高度?
我已经找到这个话题,但遗憾的是它不工作。我所试图做的事:我与开发的Java Swing的帮助下,小工具。对于我的工具的一些功能我想显示自...