代码之家  ›  专栏  ›  技术社区  ›  Seephor

JEditorPane未设置任何HTML

  •  1
  • Seephor  · 技术社区  · 10 年前

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

    我试图将一小部分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 回复  |  直到 10 年前
        1
  •  5
  •   MadProgrammer    10 年前

    经过一点测试,我发现。。。

    • HTML必须在 JEditorPane 将接受它,事实上,它似乎在做一些自己的验证,删除无效标签。。。有趣的东西
    • 我必须包括表格行和单元格 <tr><td>...</td></tr> 放到桌子上
    • 如果HTTP标头没有适当的标头,某些站点可能会主动阻止图像的下载,这意味着您在示例中的图像在 JEditor窗格 ,即使相同的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);
                }
            });
        }
    
    }