JEdi​​torPane不设置任何HTML

时间:2014-07-24 00:15:08

标签: java html image swing jeditorpane

我已经搜索过,没有看到有人在体验我的样子......但是,这是我遇到的问题:

我正在设置一小段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>

我尝试过将<html></html>添加到字符串的开头和结尾的变体,但没有运气。谁知道我错过了什么或做错了什么?

我使用的是Java 1.7.0_55 32位。

1 个答案:

答案 0 :(得分:4)

经过一些测试后我发现......

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

Editor

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);
            }
        });
    }

}