我有以下代码:
public static void main(String[] args) {
JFrame frm = new JFrame();
JEditorPane pane = new JEditorPane("text/html", "<html><body>test<br><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACuklEQVR42sWVv09TURTH71AXE40xaRdXEwbD4ODiIFr6EwcXN1cnR0cXoyTWUjcH3n0dDG4aEwcaoqggWn8ERWtoKdVBoA2lxbj4BxzPt+eaPEn7nhDeleRDTr733vP9vtvXU0VE6n8i//79L5KdUKVUXtHobUXxnIAaGtawZzcNdxvgEIw2u0Va39SMa9A9DWvYE2aAKJ4WhpPTipySgBoa1rAnzAAxXPnalkvOjCL3iYAaGtawJ/QA650iaTYuPhVQQ7MbAOazAmqrAdb4hXOe8fW/EFBDsxdgmwM8Z/M5ATU0ewF+cACYvxRQQ7MS4NwtRd9xA/NsviCghoa1vQaIjP2ZcLnBxNng9E1F37p3yYH5awE1NKxhj18PeIx5J6YJ0Jtwaz/vUKObZwoDqW8VaL5xkfQr/gaUBdTQsOZ3Fr3h8dfENAGiCU5X79ygSW7oBKDf8JO/ZXMDamhB59AbHomcZ2KaADGIy+1r5HAjjabv+lMMYNA59ERveCS8L6s3QKV9lRxsfs+H9hn0RG94DAyw1L5CepEPfOCn8cFd7I/vGQa94dE3QJpfjMr2ZZr6oui+D/c+c8OP0tALNKz5nUVveKTzfQKcL6hfmQnVWxxEin9uR8YVlVuXSC+xsQE1NKxhj18PeCSuq/LOl/AIc5KJM6M+ZHB9C60LpD+xuQE1NHO1mYAeI8yJnV/DAyZELIChJJvMtVKkK2xuQA0tKQGGAnpEjXlkT6M4xSazzTPk8ufpBVrKxm8BTGaap8itsvGyoSqatQCljWFya2LcoyaatQCPW8dJr/BnXzOsiGYtwKPmMdKrbFw3rIpmJUCaTR60jlLxK199Q0ANLW0jQJaHycPOQZpq8mTbMDRFy+bDDxDNjKsqjPC0XqAlvRMupACHmWHmbOCECylAxISIBk64kALs+99vkl5XSNCDZhMAAAAASUVORK5CYII=\"></body></html>");
pane.setEditable(false);
frm.getRootPane().setContentPane(pane);
frm.pack();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
我想做的是使用base64编码在JEditorPane上呈现图像以存储图像。它不必是base64,但这是我尝试在JEditorPane上呈现HTML内容时所获得的,但是我需要使用BufferedImage上的图像(由应用程序生成),并且,确实希望不必将映像保存到硬盘中的文件中。
我能以某种方式在Swing组件中显示BufferedImage以及HTML(在IMG标签给定的位置显示它-html代码也是由应用程序生成的)吗?
我不得不重写其中一个Java类,并扩展另一个Java类,但是让BASE64图像在JEditorPane上的HTML下工作。我会发布我的解决方案,以防将来有人需要它。
首先,创建一个特殊的HTMLEditorKit,它将对HTML.Tag.IMG使用重写的ImageView类。
class BASE64HTMLEditorKit extends HTMLEditorKit {
private static HTMLFactory factory = null;
@Override
public ViewFactory getViewFactory() {
if (factory == null) {
factory = new HTMLFactory() {
@Override
public View create(Element elem) {
AttributeSet attrs = elem.getAttributes();
Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
if (o instanceof HTML.Tag) {
HTML.Tag kind = (HTML.Tag) o;
if (kind == HTML.Tag.IMG) {
// HERE is the call to the special class...
return new BASE64ImageView(elem);
}
}
return super.create(elem);
}
};
}
return factory;
}
}
完成后,基于openjdk代码实现特殊类。在此处下载源代码,然后打开文件openjdk
/ jdk / src / share / classes / javax / swing / text / html /
ImageView.java。因为它几乎拥有私有的所有内容,所以我发现更容易将其完全复制,然后更改加载BASE64图像所需的方法:
private void loadImage() {
String b64 = getBASE64Image();
BufferedImage newImage = null;
try (ByteArrayInputStream bais = new ByteArrayInputStream(DatatypeConverter.parseBase64Binary(b64))) {
newImage = ImageIO.read(bais);
} catch (IOException ex) {
...
}
image = newImage;
}
private String getBASE64Image() {
String src = (String) getElement().getAttributes().getAttribute(HTML.Attribute.SRC);
if (src == null) {
return null;
}
return src.replaceFirst("data:image/png;base64,", "");
}
getBASE64Image方法仅剪切属性的非BASE64部分。loadImage方法是必须更改的方法,如果在公共场所使用,将有助于减少解决方案中的许多代码…
如果某人有更好的,最好是更小的(我的有1000行代码),请分享…
问题内容: 我被困住了。我在单独的文件上有几个单独的组件。如果我在main.jsx中渲染它们,如下所示: 一切正常,但我想知道这是否是一个好习惯?也许可以做一些像只有一个ReactDom.render这样的事情: 我尝试了各种LandingPageBox变量,以某种方式包括了其他两个组件,但没有运气。它们有时在页面外渲染,依此类推。我认为应该看起来像这样: 但是此代码仅呈现PageTop和Page
问题内容: 我需要能够在文本区域(即,,,)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到:
问题内容: 我需要能够在文本区域(即)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到: jsFiddle
问题内容: 我有一个swing应用程序,该应用程序将命令发送到服务器并接收XML格式的结果。我需要通过XSLT将其转换为HTML,然后在面板上显示结果HTML。问题在于,唯一能够显示HTML的Swing组件- JEditorPane- 将URL或javax.swing.text.StyledDocument用作源。带有URL的选项对我不起作用,因为我必须先将html作为文件保存在文件系统中,并且我
我在Java中的JLabel存在一个渲染问题:我使用oberver observable模式,当我的模型通知我的视图JLabel已经更改了JLabel的内容,或者特别是在我的JLabel区域中显示的内容是随机的时。有时它渲染另一个面板中按钮的一部分,有时它渲染我在视图的其他组件中设置的颜色!但是,如果我最小化然后最大化我的帧,所有的渲染都是正确的。 对不起,我的英语不好。 EDIT这是我的JPan
问题内容: 是否可以从外部源获取HTML / JSX内容并在React中动态呈现它?在我们的例子中,我们想从Wordpress API中获取内容,并在客户端和服务器上都进行渲染(我们正在使用NextJS) 因此,Wordpress API返回一个JSON响应,其中包括一个content属性,该属性是一串HTML / JSX。内容看起来像这样。 因此,如您所见,它将是HTML和React组件/ JS