【问题标题】:JEditorPane does not set any HTMLJEdi​​torPane 没有设置任何 HTML
【发布时间】:2014-09-15 09:12:46
【问题描述】:

我已经搜索过,但还没有看到任何人遇到我的情况.. 但这是我遇到的问题:

我正在尝试将一小段 HTML 设置为我的 JEditorPane 的文本。 这是代码:

JEditorPane htmlPane = new JEditorPane();
String imageString = "<img   src=\"http://tfwiki.net/mediawiki/images2/thumb/3/37/Optimusg1.jpg/350px-Optimusg1.jpg\"/>";
String description = "<table width=300 border=0 cellspacing=0></table>" + imageString + "</table>";
htmlPane.setContentType("text/html");
htmlPane.setText(description);

但是在我调用 setText 之后,我的编辑器窗格内容是:

<html>
  <head>

  </head>
  <body>
  </body>
</html>

我尝试了将&lt;html&gt;&lt;/html&gt; 添加到字符串开头和结尾的变体,但没有成功。有谁知道我错过了什么或做错了什么?

我使用的是 Java 1.7.0_55 32 位。

【问题讨论】:

  • 注意两件事,第一,你的例子不会编译,第二,你的HTML格式错误,它应该以&lt;html&gt;&lt;body&gt;为前缀,以&lt;/body&gt;&lt;/html&gt;为后缀
  • 更不用说你的 HTML table 没有行或单元格...
  • @MadProgrammer 它确实可以编译,因为我已经运行了它。即使我删除了表格并且只有图像,HTML 仍然没有设置。我还在原帖中提到我尝试在字符串的开头和结尾添加 和 ,这应该意味着我已经尝试过 等(修复了我的原帖,我没有在代码中包装“”,这就是为什么它没有在最后一段中显示。
  • "&lt;table width=300 border=0 cellspacing=0&gt;&lt;img src="http 无法编译,因为您已经关闭了 src=" 末尾的 String 引号...在我的测试中,&lt;html&gt;&lt;body&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;...&lt;/td&gt;&lt;/tr&gt;&lt;/body&gt;&lt;/html&gt; 工作...到了一定程度...
  • @MadProgrammer 对不起,我为这篇文章简化了它。实际代码是字符串的串联。

标签: java html image swing jeditorpane


【解决方案1】:

经过一番测试,我发现...

  • HTML 必须在JEditorPane 接受之前形成良好的格式,事实上,它似乎做了一些自己的验证,删除无效标签...有趣的东西
  • 我必须将表格行和单元格&lt;tr&gt;&lt;td&gt;...&lt;/td&gt;&lt;/tr&gt; 包含到表格中
  • 如果 HTTP 标头没有适当的标头,某些站点可能会主动阻止图像的下载,这意味着您在示例中的图像在 JEditorPane 中反复下载失败,即使会加载相同的 HTML浏览器(如 Chrome)中的图片
  • 在 HTML 中添加其他内容以确保其呈现您的想法有时会很有帮助,例如,我只是添加了一些文本,将表格边框设置为 1 并在图像中添加 alt 标记,这有助于验证实际渲染的某些元素...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestEditorPane {

    public static void main(String[] args) {
        new TestEditorPane();
    }

    public TestEditorPane() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JEditorPane htmlPane = new JEditorPane();
                String description = "<html><body>Hello<table border=1><tr><td><img alt='Bad' src='http://fc07.deviantart.net/fs70/i/2012/084/c/0/angry_wet_ponies_are_angry____by_tabby444-d4tyfsc.png'/></tr></td></table></body></html>";
                htmlPane.setContentType("text/html");
                htmlPane.setText(description);
                System.out.println(htmlPane.getText());

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(htmlPane));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

【讨论】:

  • 谢谢。将所有表格行标记设置为正确的 html,但图像不会下载。您提到“如果 HTTP 标头具有适当的标头,某些网站可能会主动阻止图像的下载”,您能解释一下吗?
  • HTTP 请求也可以携带user-agent 标头作为请求的一部分。一些网站主动阻止不带有适当user-agent 值的请求
  • 作为example 用于控制JEditorPane 的页面请求
猜你喜欢
  • 2011-06-06
  • 2012-07-29
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2012-03-14
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多